【问题标题】:How to fix this touch event performance problem?如何解决此触摸事件性能问题?
【发布时间】:2009-08-06 14:02:02
【问题描述】:

我正在跟踪视图上的触摸序列。该视图位于其他 3 个视图的层次结构中,并且没有任何内容覆盖它。

当触摸开始时,直到触摸移动,我得到 0.2 秒的延迟。所有后续的 touchesMoved 都只有 0.01 秒的小延迟。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    lastTime = [NSDate timeIntervalSinceReferenceDate];
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];

    if ([touch view] == self.wheelView) {
        CGFloat timeDiff = [NSDate timeIntervalSinceReferenceDate] - lastTime;
        NSLog(@"%f", timeDiff);
        lastTime = [NSDate timeIntervalSinceReferenceDate];
    }
}

从 touchesBegan: 开始直到一堆 touchesMoved: 的每个触摸序列都有如下所示的执行延迟:

0.266244
0.001605
0.025965
0.005230
0.011768
0.001601
0.010808
0.002451

如您所见,第一个被严重延迟。我只能猜测,但是:iPhone OS 会等待一段时间,看看它是否会是一个触摸序列?或者换句话说:它是否会等着看触摸是否是一种移动的触摸?

我正在尝试实现一种滚动技术,只是为了练习(当然我可以使用 UIScrollView,但我想学习)。当我开始滚动时感觉很糟糕,因为前 0.26 秒什么也没发生,然后它快速跳到手指位置。看起来很难看。

知道如何禁用此等待机制以使 touchesMoved 立即发生吗?

【问题讨论】:

    标签: iphone cocoa-touch


    【解决方案1】:

    在 if 语句之外尝试 NSLog-ging,我想你会得到相同的结果。我的猜测是 iPhone OS 会这样做

    【讨论】:

      【解决方案2】:

      在 UIScrollView,有“延迟内容触摸”选项,但我在普通的 UIView / UIViewController 上看不到它们。这个问题可能也会导致这种情况吗?有人有解决方法吗?

      【讨论】:

      猜你喜欢
      • 2016-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-07
      • 2021-06-12
      相关资源
      最近更新 更多