このトピックに関する多くの質問を認識していますが、私自身が以前に質問したことがありますが、現在、私の問題はスレッド部分に関連しているようです。私は次の2つの方法を持っています。
-(void) restartTimer {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
self.timer = [NSTimer scheduledTimerWithTimeInterval:1.
target:self
selector:@selector(dim)
userInfo:nil
repeats:YES];
time = 31;
NSLog(@"calling restart timer");
[self performSelectorOnMainThread:@selector(timerImageUpdate) withObject:nil waitUntilDone:NO];
[[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSDefaultRunLoopMode];
[[NSRunLoop currentRunLoop] run];
[pool drain];
}
-(void) resumeTimer {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
self.timer = [NSTimer scheduledTimerWithTimeInterval:1.
target:self
selector:@selector(dim)
userInfo:nil
repeats:YES];
NSLog(@"calling resume timer");
[[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSDefaultRunLoopMode];
[[NSRunLoop currentRunLoop] run];
[pool drain];
}
ゲームの開始時に restartTimer 関数が呼び出されます。これは正常に機能し、タイマーは薄暗いセレクターを適切に起動します。この問題は、ユーザーがスキップ ボタンを続けてクリックすると発生します。[スキップ] MKMapView を更新し、デリゲート メソッド mapdidfinishloading で次のものが呼び出されます。
これが発生すると、いくつかのタイマーが作成されているように見えるため、dim 関数が頻繁に呼び出され、単一のタイマーが非常に高速に実行されているように見えますか? セカンダリスレッドを使用してタイマーを開始および再起動する最良の方法は何ですか? この問題は、スキップ ボタンを繰り返しすばやく押した場合にのみ発生するように見えますが、時々押すと問題なく動作することに注意してください。
誰にもアイデアはありますか?どうもありがとう
ジュール