2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[iOS]UIImageViewがタップされた時にイベントをつける

Posted at

UIImageViewがタップされた時にイベントを発火させたかった。

バージョン

Swift 5.3
Xcode 12.1

実装

UIViewController.swift
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))
	}

}

結果

closemodal.gif

画像にイベントをつけることができました。猫がかわいいですね

解説

今回の肝になる部分はここです

imageView.isUserInteractionEnabled = true	
imageView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(tapped)))

まず、isUserInteractionEnabledはUIViewクラスが持っているプロパティで、ユーザーが行う操作(タップ、長押しなど)を無視するかどうかを決めるプロパティみたいです。
addGestureRecognizerの部分はGestureRecognizerを追加するメソッドです。

GestureRecognizerとは

ユーザーからのタップなどの操作を認識し、何かしらの処理を行うために用意されたクラスです。
上のコードで指定しているUITapGestureRecognizerUIGestureRecognizerのサブクラスみたいですね。
その他にピンチされた時(UIPinchGestureRecognizer)やスワイプ(UISwipeGestureRecognizer)された時などにイベントを発火させたり、普段自分たちが使っているアプリのUIはこのクラスをこねくり回して元に作られてそうですね。しらんけど

終わりに

GestureRecognizerを使ったら色々面白いことができそうなので、今後も触っていきたいです。

参考文献

2
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?