如何使用UIScreenEdgePanGestureRecognizer进行转换?

时间:2018-03-15 17:21:28

标签: swift xcode animation uipangesturerecognizer

我希望在左THIS上进行此类转换以返回导航。如何使用UIScreenEdgePanGestureRecognizer进行此操作?

我尝试了这个raywenderlich tutorial中的代码。但它不起作用,我不知道为什么我得到这个错误...我需要输入一些东西或者可能是什么?

enter image description here

我的代码:

    @objc func screenEdgeSwiped(_ gestureRecognizer: UIScreenEdgePanGestureRecognizer) {
    // 1
    let translation = gestureRecognizer.translation(in: gestureRecognizer.view!.superview!)
    var progress = (translation.x / 200)
    progress = CGFloat(fminf(fmaxf(Float(progress), 0.0), 1.0))

    switch gestureRecognizer.state {

    // 2
    case .began:
        interactionInProgress = true
        self.dismiss(animated: true, completion: nil)

    // 3
    case .changed:
        shouldCompleteTransition = progress > 0.5
        update(progress)

    // 4
    case .cancelled:
        interactionInProgress = false
        cancel()

    // 5
    case .ended:
        interactionInProgress = false
        if shouldCompleteTransition {
            finish()
        } else {
            cancel()
        }
    default:
        break
    }
}

而且,而且......我找到了另一种方式并且它通过这种方式工作但是有一个空白的屏幕出现了......在这种情况下,我有背景问题。< / p>

这是我的其他代码:

func swipeBack() {
    if self.canSwipeBack() {
        let edgePan = UIScreenEdgePanGestureRecognizer(target: self, action: #selector(screenEdgeSwiped))
        edgePan.edges = .left
        view.addGestureRecognizer(edgePan)
    }
}

@objc func screenEdgeSwiped(_ recognizer: UIScreenEdgePanGestureRecognizer) {
     if recognizer.state == .began || recognizer.state == .changed {
        let translation = recognizer.translation(in: self.view)
        // note: 'view' is optional and need to be unwrapped
        recognizer.view!.center = CGPoint(x: recognizer.view!.center.x + translation.x, y: recognizer.view!.center.y)
        recognizer.setTranslation(CGPoint.zero, in: self.view)
     }
     else if recognizer.state == .recognized {
        navigationController?.popViewController(animated: true)
    }
}

func canSwipeBack() -> Bool {
    return (self.navigationController?.viewControllers.count ?? 0) > 1
}

0 个答案:

没有答案