2011-09-08 50 views
1

嗨,我在我的iPhone应用程序中遇到了一些编码UIView动画的问题。我试图在更新框架属性后为UIView的框架设置一个动画。这是代码。UIView动画以错误的属性值开头

//old frame values are: 0, 0, 15, 37 

//set the frame for hiding the arrow 
[arrow setFrame:CGRectMake(-15, 100, 15, 37)]; 

//Create an animation to let the arrow slide in the view. 
[UIView beginAnimations:@"SlideInArrow" context:nil]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
[UIView setAnimationBeginsFromCurrentState:true]; 
[UIView setAnimationDuration:1.0]; 
[symbolArrow setFrame:CGRectMake(0, 100, 18, 37)]; 
[UIView commitAnimations]; 

此代码是我写的方法的一部分。当用户按下按钮时它会被触发。我建议,UI不会将新的帧值更新到对象。相反,动画使用旧值。为什么这样?有没有办法让视图或动画获得新的帧值?

回答

1

你设置animationBeginsFromCurrentState:,其中明确告知保险观测根据视图当前在屏幕上的位置来动画。此时,由于运行循环尚未完成,因此该框架仍处于{0,0},因此以前的任何setFrame:事务都未应用。首先,采取这条线,它可以自行修复。如果没有,还有其他方法可以按照您描述的方式设置fromValue

但是,基本流程很奇怪。如果代码是按照您的建议进行操作的,则箭头在{0,0}屏幕上显示,并且您将使其消失并重新滑回。这真的是你要做的动画,还是有更多的动画是你遗漏的?你试图达到什么样的效果?

请注意,您在一个案例中有arrow,另一个案例中有symbolArrow,我认为这是一个错字,但如果这些错误是不同的对象,肯定会成为问题。

0

替换该行

 [symbolArrow setFrame:CGRectMake(0, 100, 18, 37)]; 

 [arrow setFrame:CGRectMake(0, 100, 18, 37)]; 

删除此行

[UIView setAnimationBeginsFromCurrentState:true]; 
+0

您隐藏arraow对象,但动画与symbolArrow.so,此行为.so给出确切的objectname你隐藏 –

+0

哦,我没有复制第一行。箭头和符号箭头是同一个对象。我刚写了一个错误的名字。这意味着两条线“symbolArrow” – kshala

+0

看到我更新的答案 –