ramkaの朝ごはんはピーナッツパン

超個人的備忘録です。基本自分のためなので、内容の不備、読みづらさ、つまらなさはご了承ください。

長押しイベントを動的に生成したボタンに追加する

hacknote.jp

ここの記載内容を参考にイベントを追加する

結局できたコードが以下

// 長押し時のイベントを追加
btn.addGestureRecognizer(UILongPressGestureRecognizer(target: self, action: #selector(ViewController.longpushed(_:))))
        

過去に同じようにドラッグイベントを追加したときの記事
ramka.hateblo.jp

swiftで録音する

qiita.com

このままコピペしても動きませんでした

recorde関数のsetCategoryがそのままできなかったので、
以下のように変更

//            try! session.setCategory(AVAudioSessionCategoryPlayAndRecord)
            try! session.setCategory(AVAudioSession.Category.playAndRecord, mode: AVAudioSession.Mode.default, options: AVAudioSession.CategoryOptions.defaultToSpeaker)

record関数で変なエラーが出て、
「info.plistにちゃんとマイクにアクセスするってことを書いて」って怒られるので、
info.plistに以下を追加してみる

f:id:ramka:20190105232011p:plain
info.plistに追加



[-以下が追記-]
録音を行う関数の中に、再生を行うためのイニシャライズ処理も入っているようでした
録音直後は再生できるけど、一度アプリを閉じた直後に再生できなくなるのはそのためっだったようです

以下が再生も行うためのソース

        let session = AVAudioSession.sharedInstance()
        try! session.setCategory(AVAudioSession.Category.playAndRecord, mode: AVAudioSession.Mode.default, options: AVAudioSession.CategoryOptions.defaultToSpeaker)
        try! session.setActive(true)

これをしないと再生できない

UIColor設定できないよ!CGColorじゃね?って怒られるとき

こんな感じでボタンの線の色をグレイにしようとすると怒られる

btn.layer.borderColor = UIColor.lightGray

Cannot assign value of type 'UIColor' to type 'CGColor?'


こうするといい

btn.layer.borderColor = UIColor.lightGray.cgColor

動的に追加したボタンにジェスチャーを追加する

コードからボタンなどのオブジェクトを生成した時、

そのボタンを押されたとき、ドラッグされた時の処理を追加する

デザイナー(呼び方は正しいかわからない)からでは線を引っ張るだけだが、

コードではちょっとだけめんどい

でも思っていたよりは随分と楽にできたなと思う

040 GestureRecognizerのイベント取得 - Swift Docs

ここのサイトを参考に、

ジェスチャーイベントをボタンに追加する

let myPan = UIPanGestureRecognizer(target: self, action: #selector(ViewController.dragGesture(_:)))
btn.addGestureRecognizer(myPan);

1行でもいいみたい

btn.addGestureRecognizer(UIPanGestureRecognizer(target: self, action: #selector(ViewController.dragGesture(_:))))

dragGestureというのはドラッグした時に呼ばれる関数

サイトのソースをそのままコピるとその使い方できないよ
ってなるので、(Use of string literal for Objective-C selectors is deprecated; use '#selector' instead)
アップルのページを参考にする

iosdevcenters.blogspot.com

ボタンのデザインを変える

ボタンのデザインを設定できるカスタムクラスを作り、
そのクラスでボタンを生成することでボタンの角を丸くしたり、ボーダーの色を変えることができます

iritec.jp

SWIFTのバージョンでやっぱり怒られた

変更したコードは以下の通り

import UIKit


@IBDesignable
class Button_Custom: UIButton {

    @IBInspectable var textColor: UIColor?
    
    @IBInspectable var cornerRadius: CGFloat = 0 {
        didSet {
            layer.cornerRadius = cornerRadius
        }
    }
    
    @IBInspectable var borderWidth: CGFloat = 0 {
        didSet {
            layer.borderWidth = borderWidth
        }
    }
    
//    @IBInspectable var borderColor: UIColor = UIColor.clearColor() {
//        didSet {
//            layer.borderColor = borderColor.CGColor
//        }
//    }
    @IBInspectable var borderColor: UIColor = UIColor.clear {
        didSet {
            layer.borderColor = borderColor.cgColor
        }
    }

}