簡體   English   中英

如何使UIScrollView中的UIScrollView同時動作

[英]How to make UIScrollView inside a UIScrollView act simultaneously

我使用的是UIScrollView( UIScrollView_1 ),啟用了分頁,可以在3個頁面之間水平移動。
在最后一頁上有多個UIScrollViews(每個UIScrollViews在其自己的單元格中)( UIScrollView_2 ),當向右水平滾動(向前)時,將顯示最后一頁(相應地加載到要滾動的單元格)。
但是,如果向左滾動(向后滾動),我希望UIScrollView_1接管並向后滾動。
如果我向上移動手指並注冊一個新的觸摸事件,它將按預期工作。 但是我希望它在同一平底鍋上的兩個UIScrollView之間同時動作。

|-------------UIScrollView_1----------|    
| Page_1 | Page_2 |--UIScrollView_2---|  
..................|...Page_3|Page_4...|

我想要的是利用UIGestureRecognizerDelegate中的shouldRecognizeWithWith。
但是,當我嘗試將兩個UIScrollViews委派給同一個ViewController時,錯誤“ UIScrollView的內置平移手勢識別器必須將其滾動視圖作為其委派。” 顯示在ScrollView_2上。

關於如何解決這個問題的任何想法?

更新

這是page_3的UIViewController中的cellForRow,它不會導致委派錯誤,但是UIScrollViews不能同時起作用。 (例如,需要上下移動手指以檢測其他UIScrollView。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "random", for: indexPath)
    return cell
}

這是cellForRow,導致“ UIScrollView的內置平移手勢識別器必須以其滾動視圖作為其委托。”-錯誤

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "random", for: indexPath)

    let scrollView_1_VC = self.parent
    cell.scrollView_2.panGestureRecognizer.delegate = scrollView_1_VC

    return cell
}

我解決了
必須將UIScrollView的內置UIPanGestureRecognizer委托給它自己的UIScrollView,因為錯誤“ UIScrollView的內置平移手勢識別器必須將其滾動視圖作為其委托。” 說過。
而是子類化UIScrollView並創建第二個UIPanGestureRecognizer,然后與內置的UIPanGestureRecognizer同時操作。

步驟1-4:

  1. 子類化單元的UIScrollView並創建第二個UIPanGestureRecognizer。

  2. 將UIGestureRecognizerDelegate添加到CellScrollView,並使shouldRecognizeSimultaneouslyWith返回true。
    現在,第二個UIPanGestureRecognizer將與內置的UIPanGestureRecognizer同時運行。

    類CellScrollView:UIScrollView,UIGestureRecognizerDelegate {

      var panGesture : UIPanGestureRecognizer! override func awakeFromNib() { panGesture = UIPanGestureRecognizer.init(target: self, action: nil) addGestureRecognizer(panGesture) } func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { return true } 

    }

  3. 在cellForRow中,將新創建的UIPanGestureRecognizer委托給UIScrollView_1的UIViewController。

    func tableView(_ tableView:UITableView,cellForRowAt indexPath:IndexPath)-> UITableViewCell {

     if medicines.isEmpty { return tableView.dequeueReusableCell(withIdentifier: "emptyMedCell", for: indexPath) } let cell = tableView.dequeueReusableCell(withIdentifier: "random", for: indexPath) let scrollView_1_VC = self.parent cell.cellScrollView.panGesture.delegate = scrollView_1_VC return cell 

    }

  4. 最后,在ScrollView_1的UIViewController中,讓shouldRecognizeSimultaneouslyWith返回true。

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

    }

我想你想使用類似

func gestureRecognizer(UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer:UIGestureRecognizer) -> Bool {
    if page3 {
        return true
    }
}

在ScrollView_2的UIViewController上,並將ScrollView_2(而不是手勢的)委托作為ViewController,

ScrollView_2.delegate = self
UIPanGesture.delegate = ScrollView_2

暫無
暫無

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

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