0

我编写了一个使用 MKMapView 的应用程序。此应用程序使用计时器来更新屏幕上的一些信息。实际上,当用户触摸地图并开始拖动时,计时器不会再触发,直到用户释放触摸。我注意到在新的 iOS 6 中,这个问题消失了。但是我还需要支持 iOS 5。我还没有弄清楚是否只有计时器没有被触发,或者是否根本没有处理任何事件。任何想法?

4

2 回答 2

1

好的,我在这里找到了解决方案:UIScrollView pauses NSTimer until scrolling finished

基本上你必须把 NSTimer 放在它自己的运行循环中。

于 2012-10-09T12:13:20.530 回答
0

嗯,这表明定时器和触摸处理代码正在由同一个运行循环处理,或者可能触摸被阻塞,所以当定时器完成代码尝试运行时,它不能。尝试使用带有完成处理程序的异步块来运行您的计时器。

- (void)startTimerInBackground {

     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) {

    //Start timer here, set completion method to be called
    NSTimer *t = [NSTimer scheduledTimerWithTimeInterval: 2.0
                                                  target: self
                                                selector:@selector(timerCompletionMethod:)
                                                userInfo: nil repeats:NO];
    });
}

- (void)timerCompletionMethod:(NSTimer *)timer {

    //Switch back to main thread here for completion code
    dispatch_async(dispatch_get_main_queue(), ^(void) {


    });
}

看看这是否有帮助,尽管计时器不可靠,但请注意,如果您需要非常准确的计时,您可能应该查看替代方案,这里有一些非常好的信息:

如何使用 NSTimer?

于 2012-10-07T13:30:04.960 回答