以下代码来自此SO问题:documentation for get_object
。
这个摇动动画是完美的,除了它在一次迭代后停止。如何无限期地重复动画,或者如何使动画重复X次?
在重复建议使用CAKeyframeAnimation
或CABasicAnimation
的UIView动画时,还有其他SO答案,但这个问题有所不同。我们的目标是通过" springy"重现这个精确的动画。来自usingSpringWithDamping
和initialSpringVelocity.
使用自动反转和重复不会重现所需的效果,因为初始平移位于动画块之外。
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];
答案 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];
}];