1

当我从 iPhone 模拟器的硬件菜单中选择“摇动手势”时,我的第一响应者总是会收到两个摇动事件(其间有几毫秒)。

不幸的是,模拟器中的这两个事件导致UIScrollview应该滚动到特定位置的问题 - 它的作用,但仅限于第一个事件。

所以我有以下两个问题(它们以某种方式相互关联)......

问题 1

为什么模拟器会为一个“摇动手势”生成两个摇动事件?
注意:在真机上测试时不会发生这两个事件。真正的 iPhone 上的震动总是会产生一个事件。

问题2

有没有办法确保两个后续调用[myScrollView setContentOffset:CGPointMake(x,0) animated:YES];都正确执行?
注意:我觉得有趣的是——当我在调用中设置animated:为时NOsetContentOffset它完美地工作——两个调用都被执行了!不幸的是,这不是我正在开发的应用程序的选项。

顺便说一句,这个问题很容易重现。setContentOffset只需对 an 进行两次动画调用,UIScrollview然后只找到第一个执行的......

[myScrollView setContentOffset:CGPointMake(300,0) animated:YES]; //this one works
[myScrollView setContentOffset:CGPointMake(100,0) animated:YES]; //this one not

提前致谢!

最好的,马库斯

4

1 回答 1

0

这与抖动的定义有关。您所说的震动可能与模拟器发送的移动量不同。例如,您在设备上的摇动可能在任何轴上进行大动作,而模拟器可能是 2 个大动作。您通常希望在代码中使用某种抖动超时或其他逻辑来处理此问题,以便不会意外触发多个事件。您永远不会知道用户是会摇一次还是连续摇 5 次,因此您的逻辑应该能够处理所有可能的情况。

于 2009-10-15T13:42:49.913 回答