【问题标题】:Material "pull to refresh" in Swift?Swift 中的材料“拉动刷新”?
【发布时间】:2016-06-15 13:58:38
【问题描述】:

我正在尝试在 WKWebView 中实现拉动以刷新,例如 Material pull to refresh GIF。因为我们要包含已经有 html 导航栏的网站,所以我们需要在向下拖动时保持 web 视图固定。我发现拉刷新 (UIRefreshControl) 到表视图和 Web 视图,但是当用户向下拖动时视图会下降。

我将代理设置为 web 视图的 scrollView 属性并接收通知。当我拖动到顶部附近并到达 0(垂直滚动视图偏移)时,我可以禁用滚动视图,启用平移手势。但要真正移动自定义微调器视图,我需要再次触摸。

func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) 方法不起作用,因为我有一个滚动视图。

private func gestures() {

    self.panGesture = UIPanGestureRecognizer(
        target: self,
        action: "panGestureCaptured:"
    )
    self.panGesture!.enabled = false
    self.webView.addGestureRecognizer(self.panGesture!)
}

func scrollViewDidScroll(scrollView: UIScrollView) {

    if scrollView.contentOffset.y <= 0 {
    self.view.layoutIfNeeded()
        self.spinnerTopLayoutConstraint?.constant = -scrollView.contentOffset.y
    }
}

func scrollViewDidEndDragging(scrollView: UIScrollView, willDecelerate decelerate: Bool) {

    if scrollView.panGestureRecognizer.translationInView(scrollView.superview).y > 0 { // dragging down

        if scrollView.contentOffset.y == 0 {

            self.webView!.scrollView.scrollEnabled = false
          //  self.webView!.scrollView.canCancelContentTouches = true
            self.panGesture!.enabled = true
            // self.refreshWebView()


        }

        self.showNavigationItems()


    } else { // dragging up
        self.hideNavigationItems()
    }
}

【问题讨论】:

  • 只是一个想法:WebView 的滚动视图已经有一个平移识别器 (webView.scrollView.panGestureRecognizer),因此您可以收听这个(使用 addTarget)并禁用滚动视图上的弹跳。这样您就不需要禁用/启用平移识别器。
  • 成功了!非常感谢@Darko
  • 不客气。我已将评论添加为答案,请将您的问题标记为已回答。

标签: ios swift pull-to-refresh


【解决方案1】:

感谢@Darko:这个想法是使用滚动视图的 panGesture 属性(也是网络视图的属性)。

private func gestures() {

    self.webView.scrollView.panGestureRecognizer.addTarget(
        self,
        action: "panGestureCaptured:"
    )
}

func panGestureCaptured(gesture: UIGestureRecognizer) {
    let touchPoint = gesture.locationInView(self.webView)

    print("touchPoint: \(touchPoint)")

    print("panGestureCaptured scrollView offset \(self.webView!.scrollView.contentOffset.y)")

    if self.webView!.scrollView.contentOffset.y == 0 {


        if self.webView!.scrollView.panGestureRecognizer.state == UIGestureRecognizerState.Changed {

            if touchPoint.y < self.webView!.frame.height * 0.3 {
                self.spinnerTopLayoutConstraint?.constant = touchPoint.y
            } else {
                self.spinnerTopLayoutConstraint?.constant = self.webView!.frame.height * 0.3
            }

        } else if self.webView!.scrollView.panGestureRecognizer.state == UIGestureRecognizerState.Ended {
            self.spinnerTopLayoutConstraint?.constant = UIApplication.sharedApplication().statusBarFrame.height + 20
        }
    }
}

【讨论】:

    【解决方案2】:

    WebView 的滚动视图已经有一个平移识别器 (webView.scrollView.panGestureRecognizer),因此您可以收听这个(使用 addTarget)并禁用滚动视图上的弹跳。这样您就不需要禁用/启用平移识别器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-04
      • 1970-01-01
      • 1970-01-01
      • 2015-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多