今回は特定のパーツがタップ & 長押しされた時にイベントを起こすための処理を紹介します。
Storyboard
画像ファイルはテキトーなもの入れておけばOKです。
コーディング
import UIKit
class HomeViewController: UIViewController {
@IBOutlet private weak var imageView: UIImageView!
@IBOutlet private weak var tapLabel: UILabel!
private var shortCount = 0
private var longCount = 0
override func viewDidLoad() {
super.viewDidLoad()
setupTapGesture()
}
private func setupTapGesture() {
// 通常タップ用
let tapGesture: UITapGestureRecognizer = UITapGestureRecognizer(
target: self,
action: #selector(HomeViewController.tapped(_:)))
tapGesture.delegate = self
self.view.addGestureRecognizer(tapGesture)
// ロングタップ用
let longPressGesture = UILongPressGestureRecognizer(target: self, action: #selector(HomeViewController.longPress(_:)))
longPressGesture.delegate = self
self.view.addGestureRecognizer(longPressGesture)
}
}
extension HomeViewController: UIGestureRecognizerDelegate {
// 通常タップイベント
@objc func tapped(_ sender: UITapGestureRecognizer) {
if sender.state == .ended {
shortCount += 1
tapLabel.text = "\(shortCount)回タップされたよ"
if shortCount == 5 {
imageView.image = UIImage(named: "BigWave")
}
}
}
// ロングタップイベント
@objc func longPress(_ sender: UILongPressGestureRecognizer) {
// ロングタップ開始時
if sender.state == .began {
longCount += 1
tapLabel.text = "\(longCount)回ロングタップされたよ"
}
// 指が離れた時
else if sender.state == .ended {
print("Long Press終了")
}
}
}