2012-03-13 75 views
2

我有一个容器内的许多自定义UIViews,我用户移动它们后动画。要跟踪他们的移动,我使用touchesBegan:获取当前位置,并使用touchesMoved:更新位置。touchesMoved调用没有touchesBegan

偶尔,特别是如果我搬到一个视图最近(和它仍然可以被动画回到原来的位置),如果我开始拖着另一查看touchesBegan:选择将不会被调用,但touchesMoved:touchesEnded:会。如何调用touchesMoved:touchesEnded:而不是touchesBegan:首先被调用的视图?

回答

1

可能值得重新阅读Apple docs。我不知道touchesBegan保证被调用。

我猜你在记录touchesBegan等事件。也许正确的事件正在触发,但日志消息出现“乱序”?

+0

我以为我记得读了touchesBegan保证被叫,但我想我误解了。我正在记录每个触摸事件,当发生错误时,它从不记录touchesBegan。如果我找不到更好的解决方案,我只会在标记被调用时留下一个标记,并且只有在该标记被设置时才执行touchesMoved和touchesEnded操作。 – Ned 2012-03-13 14:09:54

1

我发现与我的应用程序类似的问题。如果我快速触摸第一个视图并开始滑动,那么touchesBegan事件从不会发生,但是一旦第一个视图消失,我就开始触摸移动。

根据这个答案,app starts ignores user interaction events when i call animateWithDuration:delay:options:animations:completion:,用户互动事件在动画时会被忽略,我认为这与我们都看到的一致。尝试使用UIViewAnimationOptionAllowUserInteraction选项或userInteractionEnabled属性;这应该允许事件通过你所需要的。

相关问题