#iphone #objective-c #animation #uibutton
#iPhone #objective-c #Анимация #uibutton
Вопрос:
Я использовал код в методе IBAction (нажатие кнопки):
CABasicAnimation *rotateButton; //don't forget to release
rotateButton = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
rotateButton.fromValue = [NSNumber numberWithFloat:0];
rotateButton.toValue = [NSNumber numberWithFloat:((720*M_PI)/180)];
rotateButton.duration = 0.75;
rotateButton.repeatCount = 1;
[sender addAnimation:rotateButton forKey:@"720"];
и есть ярлык, который я хочу обновить только после завершения этого. Мне интересно, есть ли простой пример, который кто-нибудь может мне предоставить, чтобы метка обновлялась только после завершения этого, а не после завершения метода. Я знаю, что вы не можете использовать «@selector(animationDidStop:finished:context:)», потому что Apple это не нравится. От кого-нибудь помощь? Пожалуйста, и спасибо вам!
Ответ №1:
Почему бы просто не использовать блок анимации UIView?
[UIView animateWithDuration:0.75 delay:0 options:0 animations:^{
theButton.transform = CGAffineTransformMakeRotation((720*M_PI)/180);
} completion:^{
theLabel.text = @"Whatever";
}];
Если вам нужна совместимость с версией до 4.x, используйте старую форму с методом класса UIView setAnimationDidStopSelector:
, например:
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDidStopSelector:@selector(someMethodInWhichYouSetTheLabelText)];
theButton.transform = CGAffineTransformMakeRotation((720*M_PI)/180);
[UIView commitAnimations];
Комментарии:
1. Я пошел и попробовал нижний код, так как я хочу, чтобы он был предварительно 4x. К сожалению, я новичок в этом, и я получаю сообщение об ошибке: «Запрос на преобразование элемента во что-то, что не является структурой или объединением» в строке CGAffineTransformMakeRotation …. есть идея для такого идиота, как я?
2. кстати .. единственным способом, которым я мог заставить @selector работать при нескольких нажатиях и правильно работать с setAnimationDidStop@selector, было использовать строку [UIView setAnimationDelegate:self] вместо [UIView commitAnimations]
Ответ №2:
Я знаю, что вы не можете использовать «@selector(animationDidStop:готово: контекст:)»
На самом деле вы можете, просто дайте ему другое имя, чтобы оно не конфликтовало с внутренним методом Apple
О вашей проблеме:
делегировать
Указывает объект делегата получателя.
animationDidStop: завершено:
Вызывается, когда анимация завершает свою активную продолжительность или удаляется с объекта, к которому она прикреплена.