Обновлять метку только после завершения анимации UIButton?

#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

О вашей проблеме:

Ссылка на класс CAAnimation

делегировать

Указывает объект делегата получателя.

animationDidStop: завершено:

Вызывается, когда анимация завершает свою активную продолжительность или удаляется с объекта, к которому она прикреплена.