[英]add tapGestureRecognizer to UIImageView in UIView and call method by protocol
我想在UIView(藍色)的UIImageView(橙色)上識別觸摸。 並希望以委托方法處理touch事件,該方法將在其他類中使用。 但是,我無法通過下面的代碼來識別觸摸。 如何實現僅在ImageView(橙色)中識別觸摸。
碼:
import UIKit
protocol CustomViewDelegate {
func imageViewTapped()
}
class CustomView: UIView {
var delegate: CustomViewDelegate?
var imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
override init(frame: CGRect) {
super.init(frame: frame)
self.backgroundColor = UIColor.blue
self.imageView.backgroundColor = UIColor.orange
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.tapped))
imageView.addGestureRecognizer(tapGestureRecognizer)
self.addSubview(imageView)
}
public required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
func tapped() {
print("tapped method called")
delegate?.imageViewTapped()
}
}
class ViewController: UIViewController, CustomViewDelegate {
override func viewDidLoad() {
super.viewDidLoad()
let view = CustomView(frame: CGRect(x: 0, y: 0, width: 300, height: 300))
view.delegate = self
self.view.addSubview(view)
}
func imageViewTapped() {
print("come to view controller")
}
}
UIImageView的默認userinteraction為false,因此在CustomView init中啟用imageView userinteraction。
imageView.isUserInteractionEnabled = true
將不同的UITapGestureRecognizer添加到不同的視圖並根據您的要求進行處理。 或添加標簽並像這樣訪問
func tapOneAct(sender: UITapGestureRecognizer){
if let tag = sender.view?.tag {
switch tag {
case 1:
println("First View Tapped")
case 2:
println("Second View Tapped")
default:
println("Nothing Tapped")
}
}
}
在UIImageView上啟用isUserInteractionEnabled
屬性,因為默認為false
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(CustomView.tapped(_:)))
imageView.isUserInteractionEnabled = true
imageView.addGestureRecognizer(tapGestureRecognizer)
self.addSubview(imageView)
在tapGesture
方法中
func tapgesture(_ sender: UITapGestureRecognizer){
if sender.state == .ended {
let touchLocation: CGPoint = sender.location(in: sender.view?.superview)
if imageView.frame.contains(touchLocation) {
print("tapped method called")
delegate?.imageViewTapped()
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.