UIGestureRecognizerが使えない時の対処法
こんにちは、プログラマーの@Yuuです。
UIGestrueRecognizerを使えばタップ、ピンチイン・ピンチアウト、ドラッグなど様々なジェスチャーを扱う事が出来るようになります。
そんな便利なUIGestrueRecognizerですが「使えない・動かない」みたいな事がありませんか?
僕はしょっちゅう「動かないー!(;゚д゚)」と慌てています。
その解決方法が分かったので、備考録も兼ねて記事にします。
スポンサーリンク
UIGestrueRecognizerが動かない時の対処法
UILabelやUIImageViewには「UserInteractionEnabled
」というプロパティを持っています。
このプロパティはUIViewが持っているプロパティで、UILabelやUIImageViewはそれを継承しているわけですね。
UserInteractionEnabled
は「タッチの検知をするかしないかの設定」を行えるプロパティです。
そのため、このUserInteractionEnabled
がONになっていないと、UIGestrueRecognizerを設定してもタップが検出出来ません。
Swiftでタップを検知出来るようにする
コードベースでUserInteractionEnabled
をONにする場合は以下のように書きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
@IBOutlet weak var myLabel: UILabel! override func viewDidLoad() { super.viewDidLoad() // タップされた時のアクションを登録 let tap = UITapGestureRecognizer(target: self, action: #selector(self.tapView(_:))) myLabel.addGestureRecognizer(tap) // myLabel自体のタップを検知するようにする myLabel.isUserInteractionEnabled = true } ・ ・ 省略 ・ ・ |
この例ではmyLabel
というUILabelのUserInteractionEnabled
を設定しています。
肝心のUserInteractionEnabled
を設定している部分は11行目になります。
この部分でfalse
を設定するとmyLabelをタップしても反応しなくなるので、もし良ければ試してみて下さい。
storyboardでタップを検知出来るようにする
もしstoryboardを使って開発を行う場合はこちらの方法が簡単です。
何故なら対象のオブジェクトの「User Interaction Enabled」というチェックボックスをONにすればいいだけだから!
これだけでOK!
簡単!(๑•̀ㅂ•́)و✧
あとがき
何かと使う機会が多いUIGestrueRecognizerですがこの設定がOFFになっているだけで動きません。
しかもUIViewはstoryboardに配置しただけでUserInteractionEnabled
がONになっているのに、UILabelやUIImageViewは配置しただけだとUserInteractionEnabled
がOFFになってるから同じノリでやると「動かない・・( º﹃º )」てなるという。。クセモノです。
ではでは
今回はこの辺で!ヽ(•̀ω•́ )ゝ✧