在 iOS 13 中呈现全屏模式时是否可以使用滑动关闭?
Is it possible to use swipe to dismiss while presenting a fullscreen modal in iOS 13?
使用 iOS13 中新的默认卡片模式呈现,有一个很好的功能,即滑动关闭。是否可以在呈现经典 .fullscreen
模态时使用此功能?
我检查了全屏显示时 isModalInPresentation
是否为假。
有什么想法吗?
似乎只有当模态显示为 sheet 时,滑动关闭才有效,如今年的 wwdc 所述:
Now, what do you all have to do to support Pull to Dismiss? In general, nothing. If you present something as a Sheet, the ability to pull it down comes for free.
这是有道理的。当您将其显示为 sheet 时,UI 看起来您可以向下滑动模态框。当您全屏显示它时,用户不应该直观地认为他应该向下滑动页面以关闭。我宁愿在这种情况下使用按钮。
正如@pepsy 所说,全屏视图并非旨在通过滑动来关闭。但是,如果你仍然想尝试,这是我开始的东西
注意:拖动时父控制器不可见,这有点小问题。
我在视图中添加了一个 UIPanGestureRecognizer 来模拟滑动以关闭行为。我还有一个关闭 (X) 按钮,因为滑动手势不如 sheet.
直观
@IBAction func panGestureRecognizerHandler(_ sender: UIPanGestureRecognizer) {
let translationY = sender.translation(in: sender.view!).y
switch sender.state {
case .began:
break
case .changed:
view.transform = CGAffineTransform(translationX: 0, y: translationY)
case .ended, .cancelled:
if translationY > 160 {
dismiss(animated: true, completion: nil)
} else {
UIView.animate(withDuration: 0.2, animations: {
self.view.transform = CGAffineTransform(translationX: 0, y: 0)
})
}
case .failed, .possible:
break
@unknown default:
break
}
}
使用 iOS13 中新的默认卡片模式呈现,有一个很好的功能,即滑动关闭。是否可以在呈现经典 .fullscreen
模态时使用此功能?
我检查了全屏显示时 isModalInPresentation
是否为假。
有什么想法吗?
似乎只有当模态显示为 sheet 时,滑动关闭才有效,如今年的 wwdc 所述:
Now, what do you all have to do to support Pull to Dismiss? In general, nothing. If you present something as a Sheet, the ability to pull it down comes for free.
这是有道理的。当您将其显示为 sheet 时,UI 看起来您可以向下滑动模态框。当您全屏显示它时,用户不应该直观地认为他应该向下滑动页面以关闭。我宁愿在这种情况下使用按钮。
正如@pepsy 所说,全屏视图并非旨在通过滑动来关闭。但是,如果你仍然想尝试,这是我开始的东西
注意:拖动时父控制器不可见,这有点小问题。
我在视图中添加了一个 UIPanGestureRecognizer 来模拟滑动以关闭行为。我还有一个关闭 (X) 按钮,因为滑动手势不如 sheet.
直观@IBAction func panGestureRecognizerHandler(_ sender: UIPanGestureRecognizer) {
let translationY = sender.translation(in: sender.view!).y
switch sender.state {
case .began:
break
case .changed:
view.transform = CGAffineTransform(translationX: 0, y: translationY)
case .ended, .cancelled:
if translationY > 160 {
dismiss(animated: true, completion: nil)
} else {
UIView.animate(withDuration: 0.2, animations: {
self.view.transform = CGAffineTransform(translationX: 0, y: 0)
})
}
case .failed, .possible:
break
@unknown default:
break
}
}