0

我有一個scrollView,它包含一個子視圖。 SubView添加了一個panGesture。使superview在某些情況下回應subView的UIPanGesture

我想什麼:

我需要pangesture到子視圖只工作如果搖攝垂直完成。如果水平平移發生,我希望scrollView響應平移而不是子視圖。我該如何實現這一目標

注意:Iam能夠在平移發生水平時以編程方式查找。

回答

1

有幾種方法可以做到這一點:

  1. 根據您的子視圖做什麼,你也許能夠與滾動視​​圖替換它並鎖定它只有垂直滾動。 (而超級應該只能水平滾動)。
  2. 如果平移手勢水平移動,您可以嘗試將子視圖中的觸摸信息提供給它的超級視圖。您可以使用委託模式來做到這一點,或者如果您知道自己的超級用戶是什麼,只需在子視圖中訪問superview即可。但是,這會在兩種觀點之間產生強烈的聯繫,可能不應該這樣做。這將是脆弱的,許多人會認爲它的代碼味道。
  3. (最佳選項) - 子類UIGestureRecognizer並創建您自己的手勢識別器,只識別垂直移動。使用該代替UIPanGestureRecognizer

選項3是最好的,但可能是最多的工作。您需要閱讀關於子類UIGestureRecognizerApple Docs - UIGestureRecognizer的Apple文檔。

我也寫我自己的拖拽手勢識別,FlxDragGestureRecognizer.mFlxDragGestureRecognizer.h(類似於泛手勢識別),您可以使用,如果你願意,或者看看拿到的如何是個好主意子類UIGestureRecognizer。你可以使用這個類來識別只在特定方向移動的觸摸,否則它將失敗(這將允許其他手勢識別器識別器,如滾動視圖)。它還有很多其他自定義和收集的信息,如速度。

1

由於您已經知道如何檢測平移,因此您需要在您的超級視圖中實現委託協議,在您的子視圖中使用委託屬性並將您的超級視圖指定爲您的子視圖的委託。

當檢測到水平平移時,調用委託方法,當檢測到垂直平移時,在子視圖中實現你想要的。