Цель анимации - многократно анимировать отскок изображения. Когда нет необходимости останавливать его вручную, вам просто нужно установить три свойства (UIViewAnimationOptionCurveEaseIn | UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat)
и код блока анимации для перемещения изображения - self.image.center = CGPointMake(self.image.center.x, self.image.center.y+25);
Вот полный код анимации:
[UIView animateWithDuration:0.5 delay:0 options:( UIViewAnimationOptionCurveEaseIn |
UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat |
UIViewAnimationOptionAllowUserInteraction) animations:^{self.image.center =
CGPointMake(self.image.center.x, self.image.center.y+25);} completion:nil];
Вот и все. Но если вам нужно ручное управление, то требуется дополнительный код. Во-первых, согласно jaminguy, вам нужно иметь свойство BOOL для индикации loop / stop (self.playAnimationForImage) анимации и очищать отдельный метод с помощью кода анимации, который будет вызываться из другого места. Вот метод:
-(void)animateImageBounce{
[UIView animateWithDuration:0.5 delay:0 options:(
UIViewAnimationOptionCurveEaseIn | UIViewAnimationOptionAutoreverse |
UIViewAnimationOptionAllowUserInteraction) animations:^{self.image.center =
CGPointMake(self.image.center.x, self.image.center.y+25);} completion:^(BOOL finished){if
(finished && self.playAnimationForImage){
self.image.center = CGPointMake(self.image.center.x, self.image.center.y-25);
[self animateImageBounce];
}}];
и вот начало вызова анимации из некоторого метода
-(void)someMethod{
...
self.playAnimationForFingers = YES;
[self animateImageBounce];
}
Я хотел бы отметить, что при ручном управлении вам необходимо сбросить center.y изображения обратно перед выполнением следующего рекурсивного вызова.