ボタンが押されると、UI に 800ms ごとに点滅させたい (オンにしてからオフにする) ボタンがあります。私は次のコードでそれを行います:
- (void)flickEmergencyButton {
// Check whether an emergency is in progress...
if (model.emergencyInProgress) {
// ...and if so, flick the state
self.emergencyButton.selected = !self.emergencyButton.selected;
// Make this method be called again in 800ms
[self performSelector:@selector(flickEmergencyButton) withObject:nil afterDelay:0.8];
} else {
// ...otherwise, turn the button off
self.emergencyButton.selected = NO;
}
}
...これは非常にうまく機能しますが、例外: UI にも UIScrollView があり、ユーザーが指を下に置いてスクロールしている間、ボタンがフリーズします。その理由は完全に理解できますが、どうすればよいかわかりません。
performSelector:withObject:afterDelay
メッセージは、メインスレッドである現在のスレッドでメッセージが送信されるようにスケジュールします。したがって、他のすべての UI アクティビティが終了するまでメッセージを処理できません。正しい?しかし、他のスレッドではボタンを選択/選択解除できないため、UI スレッドでこれを行う必要がありますよね? それで、ここでの解決策は何ですか?