想想一个UIScrollView
带有嵌入(子视图)UIView
的,排列在一列中。在 iOS6 和之前的版本中,可以配置滚动视图,以便当您用手指轻拂它时,即使初始触摸在其中一个子视图上,嵌入式视图也不会接收触摸事件;但是,如果您在不轻弹的情况下触摸子视图,则滚动视图会确定这不是滚动动作并将触摸事件转发到嵌入式视图。如果您希望能够将嵌入UIView
的 s拖放到UIScrollView
.
在 iOS 7 中,文档表明设置UIScrollView
属性delaysContentTouches
将导致触摸事件延迟,直到UIScrollView
决定是否滚动。但事实上,这似乎根本行不通。如果滚动触摸事件发生在其中一个子视图上,子视图会立即接收触摸事件并响应它们。因此,如果子视图被编程为拖放它开始拖动,而滚动视图也滚动。
似乎这种行为的模型已经改变,因为 iOS 5/6 在决定这是否是滚动动作时确实抑制了触摸事件。现在有一些新方法可以在UIScrollView
决定滚动后取消触地事件。但显然,如果拖放代码也开始移动子视图,这将没有用。
我的问题:当您通过抚摸子视图启动滚动操作时,有什么方法可以防止 iOS 7UIScrollView
在其子视图上调用低级触摸事件?当我说“低级”时,我指的是实际的触摸事件,而不是使用手势识别器。我相信简单地将delaysContentTouches
属性设置为 YES 是行不通的。
这个问题已经完全破坏了一些在 iOS 5 和 6 中运行流畅而漂亮的相当复杂的代码;并且,到目前为止,我发现没有办法告诉UIScrollView
它在其子视图中抑制事件,直到它确定它是否正在滚动。事件通过,然后在滚动视图确定它正在滚动之后触发取消触摸事件。看起来底层模型已经被重新定义为更糟,或者这是一个错误。任何见解将不胜感激。