我有一个名为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,我可以这样做,它们组合起来没有问题,但是当我移动视图的中心时,情况并非如此。
更新:发现性能错误。我有一个按钮,用于调用负责通过动画移动视图中心的方法。如果我在上一个动画完成之前按得太快,视图只会捕捉到新位置而不进行动画,并且不会调用完成块。下面是该方法的代码:
- (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];
}];
}
如果要执行多个动画,则应使用animateKeyFrames。话虽如此,您无法对正在动画的内容进行动画处理(您的描述与将要发生的事情完全匹配)。也就是说,由于视图中的值已更改(它是实际值),因此动画的发生不受您的控制。
因此,如果创建新动画,默认值为第一个动画的结束值,当第二个动画触发时,它会自动将视图移动到新位置以启动第二个动画。