ジェスチャーになりますあなたのUIImageViewのためのプロトコルを作成し、この機能を持っており、呼び出し:これは私がやっているものです代理人としてあなたのViewControllerを設定する(だけでなく、パラメータとしてImageViewのを持つことはちょうど良い練習..または一般的です):
protocol DetailPhotoDelegate {
func detailPhoto(_ detailPhoto: DetailPhotoImageView, actionFor gesture: UITapGestureRecognizer)
}
はあなたにUIImageViewサブクラスをデリゲート変数を追加し、プロトコルをプリフォームビューがタップされたときに機能します。また、UIImageViewがUIGestureRecognizerDelegateであることを確認してください。
class DetailPhotoImageView: UIImageView, UIGestureRecognizerDelegate {
var delegate: DetailPhotoDelegate?
func setupGestures() {
let tap = UITapGestureRecognizer(target: self, action: #selector(someAction(_:)))
tap.delegate = self
tap.numberOfTapsRequired = taps
addGestureRecognizer(tap)
}
func someAction(_ guesture: UITapGestureRecognizer) {
print("tap - subclass func")
guard let aDelegate = aDelegate else { assertionFailure(); return }
delegate.detailPhoto(self, actionFor: gesture)
}
}
次に、あなたのViewControllerにプロトコルを追加し、(例えば、私はのviewDidLoad(でそれをやった))どこか前に実施されているアクションにごDetailPhotoImageViewのデリゲートとして設定し、あなたが望むしかし、プロトコルのメソッドを実装します。
class ViewController: UIViewController, DetailPhotoDelegate {
@IBAction weak var detailPhoto: DetailPhotoImageView!
override func viewDidLoad() {
super.viewDidLoad()
detailPhoto.delegate = self
}
// Mark: DetailPhotoDelegate
func detailPhoto(_ detailPhoto: DetailPhotoImageView, actionFor guesture: UITapGestureRecognizer) {
switch guesture.numberOfTapsRequired {
case 1: print("1 tap"); return
case 2: print("2 taps"); return
default: print("\(guesture.numberOfTapsRequired) taps"); return
}
}
これは私が探していた答えです。ありがとうございました。私は代表者が違いを作ったと思う。 –