我有一个名为 waves 的UIView,它有一个不错的“浮动”动画
[UIView animateWithDuration:1
delay:0
options:UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat | UIViewAnimationOptionCurveEaseInOut
animations:^{
CGPoint center = waves.center;
center.y += 5;
waves.center = center;
}
completion:nil];
现在,如果我添加另一个动画,比如将此视图移动到其他位置,则“浮动”动画将停止。这是一个合理的反应,在完成块中再次启动“浮动”也没有问题。我只是想知道我是否遗漏了一些东西,可能是在动画选项中,将两者结合起来,不会互相干扰。
如果第二个动画基于CGAffineTransfromScale,我能够这样做,它们没有任何问题,但是当我移动视图的中心时,情况并非如此。
更新:发现了性能方面的错误。我有一个按钮,调用负责通过动画移动视图中心的方法。如果我在前一个动画完成之前按下它太快View只是在没有动画的情况下进入新位置并且不调用完成块。这是该方法的代码:
- (void)wavesAnimationReversed:(BOOL)reversed {
CGFloat y = waves.frame.size.height*0.25;
y = reversed ? -y : y;
// CGFloat damping = reversed ? 1 : 0.65;
CGFloat damping = 1;
[UIView animateWithDuration:kWAVES_ANIMATION_DURATION
delay:0
usingSpringWithDamping:damping
initialSpringVelocity:0
options:UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionCurveEaseInOut
animations:^{
CGPoint center = waves.center;
center.y += y;
waves.center = center;
}
completion:^(BOOL finished) {
[self handleStartWavesFloating];
}];
}
答案 0 :(得分:0)
如果要执行多个动画,则应使用animateKeyFrames。 话虽如此,你可以动画一些动画的东西(你的描述完全符合将要发生的事情)。也就是说,因为视图中的值已经更改(它的实际值),所以动画发生在你无法控制的范围内。
因此,如果您创建新动画,默认值是第一个动画的结束值,当第二个动画触发时,它会自动将视图移动到新位置以开始第二个动画。