2011-09-08 23 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

看到我更新的答案 –