5

想想一个UIScrollView带有嵌入(子视图)UIView的,排列在一列中。在 iOS6 和之前的版本中,可以配置滚动视图,以便当您用手指轻拂它时,即使初始触摸在其中一个子视图上,嵌入式视图也不会接收触摸事件;但是,如果您在不轻弹的情况下触摸子视图,则滚动视图会确定这不是滚动动作并将触摸事件转发到嵌入式视图。如果您希望能够将嵌入UIView的 s拖放到UIScrollView.

在 iOS 7 中,文档表明设置UIScrollView属性delaysContentTouches将导致触摸事件延迟,直到UIScrollView决定是否滚动。但事实上,这似乎根本行不通。如果滚动触摸事件发生在其中一个子视图上,子视图会立即接收触摸事件并响应它们。因此,如果子视图被编程为拖放它开始拖动,而滚动视图也滚动。

似乎这种行为的模型已经改变,因为 iOS 5/6 在决定这是否是滚动动作时确实抑制了触摸事件。现在有一些新方法可以在UIScrollView决定滚动后取消触地事件。但显然,如果拖放代码也开始移动子视图,这将没有用。

我的问题:当您通过抚摸子视图启动滚动操作时,有什么方法可以防止 iOS 7UIScrollView在其子视图上调用低级触摸事件?当我说“低级”时,我指的是实际的触摸事件,而不是使用手势识别器。我相信简单地将delaysContentTouches属性设置为 YES 是行不通的。

这个问题已经完全破坏了一些在 iOS 5 和 6 中运行流畅而漂亮的相当复杂的代码;并且,到目前为止,我发现没有办法告诉UIScrollView它在其子视图中抑制事件,直到它确定它是否正在滚动。事件通过,然后在滚动视图确定它正在滚动之后触发取消触摸事件。看起来底层模型已经被重新定义为更糟,或者这是一个错误。任何见解将不胜感激。

4

2 回答 2

0

你确定它在 iOS5/6 上工作吗?根据我的经验和UIScrollview delaysContentTouches等帖子,它不起作用。

也许显示它在 iOS5/6 上工作但在 iOS7 上不工作的示例代码将有助于回答您的问题。

于 2013-11-09T14:13:46.327 回答
0

这对我有用:

[scrollView setCanCancelContentTouches:YES];
[scrollView setDelaysContentTouches:YES];
于 2014-05-02T10:14:13.377 回答