iPhone SDK — как узнать, что анимация закончилась?

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

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

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

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


person Chris Newman    schedule 22.01.2010    source источник


Ответы (3)


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

 [UIView animateWithDuration:0.3 animations:^{

      myView.transform = CGAffineTransformMakeRotation(M_PI);

 }completion:^(BOOL finished) {

      NSLog(@"Animation complete!");
 }];
person Abramodj    schedule 13.05.2012

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

person Chris W.    schedule 22.01.2010

person    schedule
comment
Мне потребовалось некоторое время, чтобы понять, что это действительно сделало то, что я хотел. анимацияDidStop вызывается независимо от того, происходит ли масштабирование там, где оно шло, или если анимация сжатия берет верх. Однако значение finish говорит нам, завершилось ли оно так, как было указано изначально. Могу ли я предложить изменить тело animationDidStop в вашем примере на: if ([finished boolValue]) { NSLog(@Animation Finished!); } Тогда это идеальный ответ :) - person Chris Newman; 22.01.2010