У меня есть кнопка в моем пользовательском интерфейсе, которую я хотел бы мигать (включать и снова выключать) каждые 800 мс после нажатия кнопки. Я делаю это с помощью следующего кода:
- (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;
}
}
... который работает очень хорошо, за исключением того, что в пользовательском интерфейсе также есть UIScrollView, и пока пользователь держит на нем палец и прокручивает, кнопка зависает. Хотя я полностью понимаю, почему это так, я не уверен, что с этим делать.
Сообщение performSelector:withObject:afterDelay
планирует отправку сообщения в текущем потоке, который является основным потоком, т.е. пользовательский интерфейс и, следовательно, не сможет обработать сообщение до тех пор, пока не будут завершены все другие действия пользовательского интерфейса. Правильный? Но мне нужно сделать это в потоке пользовательского интерфейса, так как я не могу выбрать/отменить выбор кнопки в любом другом потоке, верно? Итак, какое решение здесь?