UIView动画无法正常工作

时间:2010-11-15 02:55:10

标签: iphone objective-c animation uiview

我有一个动画“抬起”按钮并投下阴影。例如,我就是这样做的。

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”。

3 个答案:

答案 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”的事实是如何影响这个逻辑的。只有一种方法可以找到...