在iOS13中,使用表单和页面表样式的模态演示可以通过向下平移的手势关闭.这在我的一个表单中是有问题的,因为用户绘制到这个框中会干扰手势.它会将屏幕向下拉,而不是绘制垂直线.
在显示为图纸的模态视图控制器中,如何禁用垂直滑动以消除手势?
设置isModalInPresentation = true
仍然允许将薄板拉下,只是不会取消.
在iOS13中,使用表单和页面表样式的模态演示可以通过向下平移的手势关闭.这在我的一个表单中是有问题的,因为用户绘制到这个框中会干扰手势.它会将屏幕向下拉,而不是绘制垂直线.
在显示为图纸的模态视图控制器中,如何禁用垂直滑动以消除手势?
设置isModalInPresentation = true
仍然允许将薄板拉下,只是不会取消.
一般来说,你不应该试图禁用滑动来取消功能,因为用户希望所有表单/页面在所有应用程序中都有相同的行为.相反,您可能希望考虑使用全屏演示样式.如果您确实想要使用不能通过滑动取消的工作表,请设置isModalInPresentation = true
,但请注意,这仍然允许工作表垂直向下拉,并且在松开touch 时它会反弹回来.查看UIAdaptivePresentationControllerDelegate个文档,以便在用户try 通过滑动等操作将其关闭时做出react .
如果你有一个应用程序的手势或touch 处理受到滑动关闭功能影响的场景,我确实收到了一位苹果工程师关于如何解决这个问题的建议.
如果您可以阻止系统的平移手势识别器开始,这将防止手势解除.要做到这一点,有几种方法:
如果您的画布绘制是使用手势识别器完成的,比如您自己的UIGestureRecognizer
子类,那么在工作表的解除手势之前进入began
阶段.认出快到UIPanGestureRecognizer
就赢了,这张纸的解散手势就被颠覆了.
如果您的画布绘制是使用手势识别器完成的,请将动态失败要求设置为-shouldBeRequiredToFailByGestureRecognizer:
(或相关的委托方法),其中,如果传入的手势识别器是UIPanGestureRecognizer
,则返回NO
.
如果您的画布绘制是使用手动touch 处理(例如touchesBegan:
)完成的,请在touch 处理视图上覆盖-gestureRecognizerShouldBegin
,如果传入的手势识别器是UIPanGestureRecognizer
,则返回NO
.
通过我的设置#3证明效果很好.这允许用户向下滑动绘图画布之外的任何位置以关闭(如导航栏),同时允许用户在不移动图纸的情况下进行绘图,正如人们所期望的那样.
我不推荐try 寻找手势来禁用它,因为它似乎是相当动态的,例如在不同大小的类之间切换时可以重新启用,这可能会在future 的版本中发生变化.