关于在Swift中触摸屏幕一次即可识别手势的问题

时间:2020-03-13 08:25:47

标签: ios swift

您好,我编写了一个代码,该代码使用Gesture进行修饰,可以在触摸时翻动书页或将书本的屏幕更改为全屏显示。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.19.1</version>
    <configuration>
      <parallel>methods</parallel>
      <threadCount>10</threadCount>
    </configuration>
  </plugin>
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
    }

当我第一次进入看书的视野时,一次触摸只会发生一次触摸事件。

但是问题是,您可以观看奖励广告并免费阅读这本书。 如果从查看奖励广告的屏幕再次进入查看书籍的屏幕,则一次触摸就会发生两次触摸事件。

观看奖励广告5次后,如果触摸一次,将发生5次触摸事件。看来,每当我进入奖励广告屏幕时,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 } } 功能似乎都会出现问题。

我该怎么做才能防止这种情况?

1 个答案:

答案 0 :(得分:4)

如果要获取手势识别器的位置,则不应从委托那里获取。相反,您应该按如下所示从动作中传递手势。

    @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)