繁体   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