簡體   English   中英

如何將UIPanGestureRecognizer添加到UIScrollView子視圖

[英]How to add UIPanGestureRecognizer to UIScrollView subviews

我將子視圖添加到UIScrollView ,然后我將UIPanGestureRecognizer添加到這些子視圖。 一切正常但現在將UIPanGestureRecognizer添加到滾動視圖的子視圖后,無法滾動。

這個問題的可能解決方案是什么?

問題是平移手勢識別器是滾動視圖中用於控制滾動的內容。 您的手勢識別器正在優先處理並禁用滾動視圖

如果您希望始終能夠滾動,則可以將手勢識別器設置為要求滾動視圖在其工作之前失敗:

[self.myCustomPanRecognizer requireGestureRecognizerToFail:self.scrollView.panGestureRecognizer]; 

編輯:正如Bastian在評論中指出的那樣,對於pan guest的引用僅在iOS 5中,在此之前,檢查手勢識別器的數組並找到UIPanGestureRecognizer類型之一

如果您希望兩者兼顧,則可能需要執行一些操作以將識別器與滾動視圖分開,例如,在識別自定義識別器之前,讓用戶點按並按住。

還有一個委托方法,允許兩個識別器一起工作,但我不確定這兩種方法是否相同

如果你想同時使用兩者,你​​可以使用

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

來自代表,但這可能不是你想要的;)

斯威夫特4

使視圖控制器符合UIGestureRecognizerDelegate ...

SomeViewController: UIViewController, UIGestureRecognizerDelegate {
    ...
}

...將視圖控制器設置為自定義平移手勢識別器的委托...

customPanGestureRecognizer.delegate = self

...並使用同時委托,允許自定義平移器和滾動視圖(或表視圖)的平移器同時操作...

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {

    if otherGestureRecognizer == scrollView.panGestureRecognizer { // or tableView.panGestureRecognizer
        return true
    } else {
        return false
    }

}

還有另外兩種方法詢問代表是否手勢識別器應該要求另一個手勢識別器失敗,或者是否應該要求手勢識別器通過另一個手勢識別器失敗。 您可能需要進一步優化,但這是起點。

暫無
暫無

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

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