我有一个动画“抬起”按钮并投下阴影。例如,我就是这样做的。
button1shadow.alpha = 0;
button1shadow.hidden = NO;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1.5];
CGRect frame11 =searchByName.frame;
frame11.origin.y -=20;
frame11.origin.x +=20;
searchByName.frame = frame11;
searchByNameLabel.frame = frame11;
CGRect frame21 = button1shadow.frame;
frame21.origin.y +=10;
frame21.origin.x -=10;
button1shadow.frame = frame21;
searchByName.alpha = 1;
button1shadow.alpha = 0.1;
[UIView commitAnimations];
如果我单独运行它就可以正常工作。
然后我把这段代码放在上面的代码之后。
button1shadow.hidden = NO;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDelay:2.0];
[UIView setAnimationDuration:1.5];
CGRect frame11 =searchByName.frame;
frame11.origin.y +=20;
frame11.origin.x -=20;
searchByName.frame = frame11;
searchByNameLabel.frame = frame11;
CGRect frame21 = button1shadow.frame;
frame21.origin.y -=10;
frame21.origin.x +=10;
button1shadow.frame = frame21;
searchByName.alpha = 1;
button1shadow.alpha = 0.1;
[UIView commitAnimations];
两者分别很好地工作,但是当我将它们紧接在一起组合时,第一个动画不会显示,但按钮会跳到我指定的坐标而不是动画。有什么想法吗?
修改: 我还尝试使用以下方法调用第二个动画:
[NSTimer timerWithTimeInterval:2.0 target:self selector:@selector(lowerButtons) userInfo:nil repeats:NO];
然而,它似乎甚至没有叫“lowerButtons”。
答案 0 :(得分:2)
您正在设置动画延迟,所以这应该有效,但您是否尝试在委托回调中执行第二个动画?查看UIView
的{{1}}和+setAnimationDelegate:
方法。
答案 1 :(得分:1)
提交动画时,UIView
(或CALayer
)上的属性会立即设置。例如。如果你将视图向上移动100px,一旦你提交了这个动画,视图的框架就会显示它是100px,即使它看起来不像(还)。如果要一个接一个地排队动画,则需要直接使用CAAnimation
,或者在第一个animationDidStop:
委托回调中设置第二个动画。要注册代理回调,请参阅+[UIView setAnimationDelegate:]
。
或者,如果第二个动画只是反向的第一个动画,您可以尝试使用+[UIView setAnimationRepeatAutoreverses:]
和+[UIView setAnimationRepeatCount:]
方法。
答案 2 :(得分:0)
我认为它的工作方式是,如果您使用给定的AnimationID启动了一个动画,然后运行具有相同ID的另一个动画,则第二个将“覆盖”第一个动画。
因此,答案是在每个beginAnimation块中使用两个不同的 animationID。
我不太确定你传递“nil”的事实是如何影响这个逻辑的。只有一种方法可以找到...