如何使用animateWithDuration无限期地重复摇动动画或X次?

时间:2016-08-05 08:28:15

标签: ios animation core-animation uiviewanimation

以下代码来自此SO问题:documentation for get_object

这个摇动动画是完美的,除了它在一次迭代后停止。如何无限期地重复动画,或者如何使动画重复X次?

在重复建议使用CAKeyframeAnimationCABasicAnimation的UIView动画时,还有其他SO答案,但这个问题有所不同。我们的目标是通过" springy"重现这个精确的动画。来自usingSpringWithDampinginitialSpringVelocity.

的效果

使用自动反转和重复不会重现所需的效果,因为初始平移位于动画块之外。

view.transform = CGAffineTransformMakeTranslation(20, 0);
[UIView animateWithDuration:0.4 delay:0.0 usingSpringWithDamping:0.2 initialSpringVelocity:1.0 options:UIViewAnimationOptionCurveEaseInOut animations:^{
    view.transform = CGAffineTransformIdentity;
} completion:nil];

2 个答案:

答案 0 :(得分:0)

如果你需要完全相同的代码几次,而不是将代码放在方法中并进行递归,那就像这样:

- (void)animateCount:(NSInteger)count {
   if (count == 0) {
      return;
   }

   view.transform = CGAffineTransformMakeTranslation(20, 0);
   [UIView animateWithDuration:0.4 delay:0.0 usingSpringWithDamping:0.2 initialSpringVelocity:1.0 options:UIViewAnimationOptionCurveEaseInOut animations:^{
      view.transform = CGAffineTransformIdentity;
   } completion:^{
      count--;
      [self animateCount:count];
   }];
}

答案 1 :(得分:0)

在选项中使用(UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat)无限期重复

[UIView animateWithDuration:0.4 delay:0.0 usingSpringWithDamping:0.2 initialSpringVelocity:1.0 options:(UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat | UIViewAnimationOptionCurveEaseInOut) animations:^{

    someView.frame = someFrame1;

} completion:^(BOOL finished) {

    [UIView animateWithDuration:0.5f animations:^{

        someView.frame = someFrame2;

    } completion:nil];

}];