iPhone SDK - как узнать, когда анимация закончилась? - PullRequest
5 голосов
/ 22 января 2010

Я запускаю анимированное увеличение при прикосновении к изображению, а затем уменьшаю его до нормального размера, когда оно высвобождается. Используя setAnimationBeginsFromCurrentState: YES, эффект масштабирования будет приятным и плавным, если вы поднимаете палец в процессе анимации.

Однако я хочу «заблокировать» больший размер на месте, если вы дотронулись до изображения достаточно долго, чтобы завершить анимацию, но позвольте ему уменьшиться, как обычно, если вы преждевременно отпустите.

Есть ли способ узнать, запущена ли в данный момент анимация или завершена ли конкретная анимация?

Я полагаю, что, вероятно, я могу сделать это с помощью executeSelector: afterDelay: call в touchesStarted с задержкой, равной длине анимации, и отменой ее, если touchchesEnded приходит слишком рано, но я не могу представить, что это лучший способ. ..

Ответы [ 3 ]

13 голосов
/ 22 января 2010
- (void)animateStuff {
    [UIView beginAnimations:@"animationName" context:nil];
    [UIView setAnimationDelegate:self];
    [self.view doWhatever];
    [UIView commitAnimations];
}

- (void)animationDidStop:(NSString *)animationID
                finished:(NSNumber *)finished
                 context:(void *)context
{
    if ([finished boolValue]) {
        NSLog(@"Animation Done!");
    }
}
1 голос
/ 13 мая 2012

Другая возможность:

 [UIView animateWithDuration:0.3 animations:^{

      myView.transform = CGAffineTransformMakeRotation(M_PI);

 }completion:^(BOOL finished) {

      NSLog(@"Animation complete!");
 }];
0 голосов
/ 22 января 2010

Я думаю, "+ (void) setAnimationDidStopSelector: (SEL) селектор" должен делать то, что вы хотите. Он вызовет данный селектор для вашего делегата после завершения анимации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...