MKMapViewを使用するアプリケーションを作成しました。このアプリケーションは、タイマーを使用して画面上の情報を更新します。実際、ユーザーがマップにタッチしてドラッグを開始すると、ユーザーがタッチを離すまでタイマーは起動しなくなります。新しいiOS6では、この問題が解消されていることに気づきました。ただし、iOS 5もサポートする必要があります。タイマーだけが起動されないのか、イベントがまったく処理されないのかわかりません。何か案が?
質問する
152 次
2 に答える
1
ここで解決策を見つけました:UIScrollViewは、スクロールが終了するまでNSTimerを一時停止します
基本的に、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) {
});
}
それが役立つかどうかを確認してください。タイマーは信頼できないことに注意してください。非常に正確なタイミングが必要な場合は、おそらく代替案を検討する必要があります。ここにいくつかの非常に優れた情報があります。
于 2012-10-07T13:30:04.960 に答える