【发布时间】:2014-11-24 12:32:02
【问题描述】:
我有一个名为 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];
}];
}
【问题讨论】:
-
UIViewAnimationOptionBeginFromCurrentState标志呢? -
@GuyKogus 不,不成功
-
关于您的更新,如果您不希望发生快照,请检查
finished是否为真(或YES,而是)。另外,如果对变换进行动画处理,那么为什么不在动画块中尝试使用CGAffineTransfromTranslate? -
如果您不希望发生这种情况,请禁用该按钮并按照@GuyKogus 的建议使用完成块再次启用它。
-
@wolffan 是的,这就是我最终所做的。
标签: ios objective-c animation uiview