Не думаю, что вы можете остановить анимацию, уже запланированную. Но вы можете установить переменную экземпляра с флагом BOOL
, указывающим, была ли кнопка уже нажата или нет.
Например, предположим, что целью вашей кнопки является метод buttonTapped
.
Инициализируйте ваш флаг на NO
.
- (id)init {
if (self = [super init]) {
buttonAlreadyTapped = NO;
}
return self;
}
В целях вашей кнопки установите флаг YES
.
- (void)buttonTapped {
self.buttonAlreadyTapped = YES;
}
И изменять alpha
только если флаг NO
.
for (NSInteger i = 1; i <= [menuItems count]; i++) {
UIButton *menuItem = [menuItems objectAtIndex:i-1];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (3 * i) * NSEC_PER_SEC), dispatch_get_current_queue(), ^{
if (!self.buttonAlreadyTapped) {
menuItem.alpha = 1.0f;
}
});
}
Помните, что отправка сообщений на UIKit
должна всегда выполняться в главном потоке.
for (NSInteger i = 1; i <= [menuItems count]; i++) {
UIButton *menuItem = [menuItems objectAtIndex:i-1];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (3 * i) * NSEC_PER_SEC), dispatch_get_current_queue(), ^{
if (!self.buttonAlreadyTapped) {
dispatch_async(dispatch_get_main_queue(), ^{
menuItem.alpha = 1.0f;
});
}
});
}