UIImageViewがタップされた時にイベントを発火させたかった。
バージョン
Swift 5.3
Xcode 12.1
実装
import UIKit
class UIImageViewEventViewController: UIViewController {
let imageView: UIImageView = UIImageView(image: UIImage(named: "cat"))
override func viewDidLoad() {
super.viewDidLoad()
imageView.frame.size = CGSize(width: 100, height: 100)
imageView.center = view.center
view.addSubview(imageView)
imageView.isUserInteractionEnabled = true
imageView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(tapped)))
}
@objc
func tapped() {
imageView.center = CGPoint(x: Double.random(in: 100...200), y: Double.random(in: 100...300))
}
}
結果
画像にイベントをつけることができました。猫がかわいいですね
解説
今回の肝になる部分はここです
imageView.isUserInteractionEnabled = true
imageView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(tapped)))
まず、isUserInteractionEnabled
はUIViewクラスが持っているプロパティで、ユーザーが行う操作(タップ、長押しなど)を無視するかどうかを決めるプロパティみたいです。
addGestureRecognizer
の部分はGestureRecognizerを追加するメソッドです。
GestureRecognizerとは
ユーザーからのタップなどの操作を認識し、何かしらの処理を行うために用意されたクラスです。
上のコードで指定しているUITapGestureRecognizer
もUIGestureRecognizer
のサブクラスみたいですね。
その他にピンチされた時(UIPinchGestureRecognizer)やスワイプ(UISwipeGestureRecognizer)された時などにイベントを発火させたり、普段自分たちが使っているアプリのUIはこのクラスをこねくり回して元に作られてそうですね。しらんけど
終わりに
GestureRecognizerを使ったら色々面白いことができそうなので、今後も触っていきたいです。