簡體   English   中英

檢測用戶點擊屏幕 Swift

[英]Detect that user tap on screen Swift

我想在用戶點擊除該視圖之外的其他內容后從屏幕中刪除UIVIew (為了給你形象化,我將上傳我的視圖草圖)[

在此處輸入圖片說明 ] 1

並且我想在用戶點擊此視圖中除按鈕之外的其他UIview后刪除藍色UIview 我應該使用什么?

編輯:在藍色UIVIew有兩個按鈕,我想在用戶點擊背景圖像時刪除該視圖

我做了“yerpy”告訴我要做的事情,但它不起作用。

func test(gestureRecognizer: UITapGestureRecognizer) {
    print("test")
}

func setUpBackgroundImageView() {
    self.view.addSubview(backgroundImageView)
    backgroundImageView.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true
    backgroundImageView.heightAnchor.constraint(equalTo: view.heightAnchor).isActive = true
    backgroundImageView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
    backgroundImageView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
    let tap = UITapGestureRecognizer(target: self, action: #selector(test(gestureRecognizer:)))
    backgroundImageView.addGestureRecognizer(tap)
    tap.delegate = self
}

我還將shouldReceiveTouch函數添加到UIGestureRecognizerDelegate 我做錯了什么?

UIGestureRecognizer添加到super view

正如你所說,你有圖像視圖作為背景。

 let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(tapped(gestureRecognizer:)))
        imageView.addGestureRecognizer(tapRecognizer)
        tapRecognizer.delegate = self

添加目標操作:

func tapped(gestureRecognizer: UITapGestureRecognizer) {
       // Remove the blue view.
    }

然后在UITapGestureRecognizerDelegate里面:

extension ViewController : UIGestureRecognizerDelegate {
    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
        if touch.view!.superview!.superclass! .isSubclass(of: UIButton.self) {
            return false
        }
        return true
    }
}

希望它有幫助!

編輯

通過啟用確保用戶可以觸摸viewself.view.userInteractionEnabled = true

您可以為該視圖使用 UITapGestureRecognizer

   override func viewDidLoad() {
        super.viewDidLoad()

        // Add "tap" press gesture recognizer
        let tap = UITapGestureRecognizer(target: self, action: #selector(tapHandler))
        tap.numberOfTapsRequired = 1
        backgroundimage.addGestureRecognizer(tap)
    }

    // called by gesture recognizer
    func tapHandler(gesture: UITapGestureRecognizer) {

        // handle touch down and touch up events separately
        if gesture.state == .began {

        } else if  gesture.state == .ended {

        }
    }

你可以

  1. 具有該背景視圖的子類,並實現一個繼承的方法-beganTouches:(there is another para but I forget what it is)
  2. 向該視圖添加一個 UITapGestureRecognizer

1- 在您的視圖下方添加一個視圖,稱之為疊加(灰色)

2- 添加包含所有按鈕的容器視圖(綠色按鈕)

3- 向疊加層添加點擊手勢(拖動點擊以疊加視圖)

4- 為視圖控制器創建一個@IBAction 的點擊

5- 編寫代碼將您的綠色視圖隱藏在@IBAction 中

圖片

圖片

在所有按鈕下添加一個覆蓋整個屏幕的巨大按鈕。 每當用戶按下較小按鈕下方的巨大按鈕時,就可以執行您希望它執行的操作。

不是最優雅的,但它有效:P

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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