0

MKMapViewを使用するアプリケーションを作成しました。このアプリケーションは、タイマーを使用して画面上の情報を更新します。実際、ユーザーがマップにタッチしてドラッグを開始すると、ユーザーがタッチを離すまでタイマーは起動しなくなります。新しいiOS6では、この問題が解消されていることに気づきました。ただし、iOS 5もサポートする必要があります。タイマーだけが起動されないのか、イベントがまったく処理されないのかわかりません。何か案が?

4

2 に答える 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) {


    });
}

それが役立つかどうかを確認してください。タイマーは信頼できないことに注意してください。非常に正確なタイミングが必要な場合は、おそらく代替案を検討する必要があります。ここにいくつかの非常に優れた情報があります。

NSTimerを使用するにはどうすればよいですか?

于 2012-10-07T13:30:04.960 に答える