簡體   English   中英

關於在 Swift 中觸摸屏幕時識別手勢的問題

[英]Question about recognizing a gesture while touching the screen once in Swift

您好,我編寫了一個代碼,它使用手勢識別來翻書或在觸摸時將書的屏幕更改為全屏。

fileprivate func setupTap() {
        let tap = UITapGestureRecognizer(target: self, action: #selector(webViewTapped))
        tap.numberOfTapsRequired = 1
        tap.delegate = self
        webView?.addGestureRecognizer(tap)
        webView?.isUserInteractionEnabled = true
    }

    @objc func webViewTapped() {
        setupHiddenView()
    }
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {

        let prePagePoint = gestureRecognizer.location(in: self.view)
        let nextPagePoint = gestureRecognizer.location(in: self.view)
        let fullscreenPoint = gestureRecognizer.location(in: self.view)

        if prePageTapView.frame.contains(prePagePoint) {
            userDefaults.set("p", forKey: UserDefaults.Keys.pageTapped)
        } else if nextPageTapView.frame.contains(nextPagePoint) {
            userDefaults.set("n", forKey: UserDefaults.Keys.pageTapped)
        } else if fullscreenTapView.frame.contains(fullscreenPoint) {
            userDefaults.set("f", forKey: UserDefaults.Keys.pageTapped)
        }
      return true
    }
fileprivate func setupHiddenView() {
        if userDefaults.string(forKey: UserDefaults.Keys.pageTapped) == "f" {

            print("FULL SCREEN MODE.")

        } else if userDefaults.string(forKey: UserDefaults.Keys.pageTapped) == "p" {
            print("Previous Page")
            //code
        } else if userDefaults.string(forKey: UserDefaults.Keys.pageTapped) == "n" {
            print("Next Page")
            //code
        }
    }

當我第一次進入閱讀一本書的視圖時,我觸摸一次時只發生一個觸摸事件。

但問題是,您可以免費觀看獎勵廣告並閱讀這本書。 如果您從查看獎勵廣告的屏幕再次進入查看書籍的屏幕,則一次觸摸會發生兩次觸摸事件。

獎勵廣告觀看5次后,觸摸一次,會發生5次觸摸事件。 好像每次進入獎勵廣告畫面的時候, gestureRecognizer (_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer)-> Bool函數好像有問題。

我能做些什么來防止這種情況?

如果您想獲取手勢識別器的位置,則不應從代理那里獲取。 相反,您應該按如下方式從動作傳遞手勢。

    @objc func handleTap(_ sender: UITapGestureRecognizer? = nil) {

        let prePagePoint = sender.location(in: self.view)
        let nextPagePoint = sender.location(in: self.view)
        let fullscreenPoint = sender.location(in: self.view)

        if prePageTapView.frame.contains(prePagePoint) {
            userDefaults.set("p", forKey: UserDefaults.Keys.pageTapped)
        } else if nextPageTapView.frame.contains(nextPagePoint) {
            userDefaults.set("n", forKey: UserDefaults.Keys.pageTapped)
        } else if fullscreenTapView.frame.contains(fullscreenPoint) {
            userDefaults.set("f", forKey: UserDefaults.Keys.pageTapped)
        }

 //       Handle event
    }

然后將其設置為

   let tap = UITapGestureRecognizer(target: self, action: #selector(handleTap(_:)))
        tap.numberOfTapsRequired = 1
        tap.delegate = self
        webView?.addGestureRecognizer(tap)

暫無
暫無

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

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