2016-03-02 100 views
3

我正試圖在WKWebView中像這樣的Material pull to refresh GIF一樣刷新。因爲我們想要包含已經有html導航欄的網站,所以我們需要在拖拽時保持網頁視圖的修復。我發現拉刷新(UIRefreshControl)到表視圖和Web視圖,但視圖隨着用戶拖拽而下降。Swift中的材質「拉動刷新」?

我將代理設置爲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() 
    } 
} 
+0

只是一個想法:WebView的滾動視圖已經有一個泛識別器(webView.scrollView.panGestureRecognizer),所以你可以聽這一個(與addTarget)並禁用滾動視圖上的彈跳。這樣您就不需要禁用/啓用平移識別器。 – Darko

+0

它工作!非常感謝你@Darko –

+0

不客氣。我已添加評論作爲答案,請將您的問題標記爲已回答。 – Darko

回答

1

感謝@Darko:這個想法是使用滾動視圖(也Web視圖的屬性)的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 
     } 
    } 
} 
1

的WebView滾動視圖已經有一個鍋識別(webView.scrollView.panGestureRecognizer),所以你可以聽這一個(與addTarget)和禁用彈跳滾動視圖。這樣您就不需要禁用/啓用平移識別器。