2017-07-26 25 views
0

我想清理一些屬性時,用戶滑動頁面彈出viewController,只是使其工作原理與點擊返回按鈕相同。如何識別interactivePopGestureRecognizer成功進行刷卡時彈出viewController?

我嘗試下面的代碼,但它失敗了,因爲不是每次刷卡都是成功的。由於手勢被取消,因此一些揮手彈出可能會失敗。

我在UIGestureRecognizer中找不到足夠好的代表(找到類似touchesEnded的東西)。我也不能使用目標動作,因爲動作會被調用太多次。

func viewWillAppear(_ animated: Bool) { 
    self.navigationController.interactivePopGestureRecognizer.delegate = self 
} 
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool { 
    viewModel.goBackPage(isSwipeBack: true) 
    return true 
} 

我該如何解決觸發器backButtonPressed在刷卡時彈出viewController在正確的時刻?

+1

你爲什麼不使用'viewDidDisappear'? –

+0

因爲推到下一個viewController也會觸發viewDidDisappear。 但你給了我一個想法,也許我可以使用gestureRecognizer的狀態來設置一個標誌'isSwipeBegan'來決定我是否在viewDidDisappear中滑回。 – allenlinli

回答

0

哦,我的上帝,在@Sam_M的幫助下(https://stackoverflow.com/users/6739471/sam-m)的評論,我解決了它!

override func viewWillDisappear(_ animated: Bool) { 
    super.viewWillDisappear(animated) 
    if isSwipePop { 
     viewModel.goBackPage(withPopViewController: true) 
    } 
} 


func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool { 
    switch gestureRecognizer.state { 
    case .possible: 
     isSwipePop = true 
     break 
    case .began: 
     isSwipePop = true 
     break 
    case .changed: 
     isSwipePop = true 
     break 
    default: 
     isSwipePop = false 
     break 
    } 
    return true 
} 
+1

很高興幫助:)您也可以使用'if self.isBeingDismissed || self.isMovingFromParentViewController {0}確定您是前進還是後退。 –

+0

你也可以結合你的例子,例如'case.possible,.began,.changed:',你也不需要在快速切換中使用'break'。每種情況都會自動中斷交換機。 –

+0

嗨@Sam_M,我更新了一個答案beloew,也許你感興趣:) – allenlinli

0

我發現viewWillDisappear即使刷卡不成功也會被調用。所以我改成了這樣:

override func viewDidDisappear(_ animated: Bool) { 
    super.viewDidDisappear(animated) 

    print("viewDidDisappear \(self)") 
    if isSwipePop && isMovingFromParentViewController { 
     viewModel.goBackPage(withPopViewController: true) 
    } 

    isSwipePop = false 
} 

欲瞭解更多信息,這是從兩個頁面滑動到一個頁面的場景。

刷卡到一個頁面從兩個頁面,發佈在半路上刷卡一頁,它彈回兩頁:

viewWillDisappear第二頁
viewWillAppear中第一個
viewWillDisappear壹
viewDidDisappear壹
viewWillAppear中第二頁
viewDidAppear第二頁

從成功兩頁的滑動即可一頁:

viewWillDisappear第二頁
viewWillAppear中第一個
viewDidDisappear第二頁
viewDidAppear壹

相關問題