的iOS添加第二个动画已经动画的UIView
问题描述:
我有一个UIView称为波,它有一个很好的无尽的“浮动”动画的iOS添加第二个动画已经动画的UIView
[UIView animateWithDuration:1
delay:0
options:UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat | UIViewAnimationOptionCurveEaseInOut
animations:^{
CGPoint center = waves.center;
center.y += 5;
waves.center = center;
}
completion:nil];
现在,如果我添加其他动画,说提出这个观点的不同位置,“浮动”动画停止。这是一个合理的反应,在完成块中再次启动“浮动”是没有问题的。我只是想知道如果我错过了某些东西,或许在动画选项中,将两者结合起来,不会相互打断。
我能这样做,如果第二动画是基于CGAffineTransfromScale,他们结合没有问题,但是当我移动视图的中心是不是这样的。
UPDATE:发现了一个bug性能。我有一个按钮,调用负责使用动画移动视图中心的方法。如果在上一个动画完成之前按下它太快,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];
}];
}
答
如果要执行多个动画,则应使用animateKeyFrames。 这就是说,你不能动画正在动画的东西(你的描述完全匹配会发生什么)。也就是说,因为视图中的值已经被更改(它是真实值),所以动画发生在您的控制之外。
因此,如果您创建一个新的动画,默认值是您的第一个动画的最终值时,第二个动画触发器,它会自动在视图中移动到新的位置开始第二动画。
怎么样'UIViewAnimationOptionBeginFromCurrentState'标志? – 2014-11-24 12:35:24
@GuyKogus不,不会做的伎俩 – NKorotkov 2014-11-24 12:55:47
关于你提到的更新,如果你不希望发生的卡,然后检查是否'finished'是真实的(或'YES',相当)。另外,如果对变换进行动画处理,那么为什么不尝试在动画块中使用'CGAffineTransfromTranslate'? – 2014-11-24 14:05:09