簡體   English   中英

將tapGestureRecognizer添加到UIView中的UIImageView並按協議調用方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM