我希望在左THIS上进行此类转换以返回导航。如何使用UIScreenEdgePanGestureRecognizer进行此操作?
我尝试了这个raywenderlich tutorial中的代码。但它不起作用,我不知道为什么我得到这个错误...我需要输入一些东西或者可能是什么?
我的代码:
@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
}