如何修复此触摸事件性能问题?

时间:2009-08-06 14:02:03

标签: iphone cocoa-touch

我正在跟踪视图上的触摸序列。该视图采用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立即发生吗?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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