2010-12-18 103 views
2

我有一個自定義視圖,必須跟蹤用戶的位置。我把下面的代碼touchesBegan,以及在touchesMoved與UIView,animateWithDuration和beginFromCurrentState的故障

[UIView animateWithDuration:0.2 delay:0.0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{ 
    cursorView.center = locationOfTouch; 
} completion:^(BOOL finished){}]; 

這似乎相當簡單給我。我期望視圖始終對用戶的當前位置進行動畫處理,即使該位置已更改且視圖仍然具有動畫效果(由於beginFromCurrentState選項)。

然而,每個動畫完全完成。他們不會「過渡」到新的動畫,不是他們先完成,然後開始新的動畫。

我嘗試添加在touchesMoved這行:

[cursorView.layer removeAllAnimations]; 

沒有做任何事情。沒有動畫被取消。有任何想法嗎?

+0

有沒有要與一個動畫來做到這一點的理由,而不是每次touchesMoved是剛剛設置中心叫什麼名字? – 2010-12-18 07:28:15

+0

是的;我不希望視圖「跳」到觸摸的位置。我希望它能順利地將它製作成動畫。 – Rits 2010-12-19 16:45:24

回答

2

[cursorView.layer removeAllAnimations];您訪問視圖的圖層,但您已將動畫設置爲不是直接顯示在圖層上,而是設置爲視圖。
嘗試:

[UIView beginAnimations:nil context:NULL] 
[UIView setAnimationDuration:0.2]; 
[UIView setAnimationBeginsFromCurrentState:YES]; 
[UIView setAnimationCurve:UIViewAnimationCurveLinear]; 
cursorView.center = locationOfTouch; 
[UIView commitAnimations]; 

,並離開了removeAllAnimations,它應該從當前狀態轉換。

+0

沒有一種方法可以使用iOS 4塊的方法嗎?我認爲蘋果建議不要使用'beginAnimations:context:'自iOS 4以來? – Rits 2011-01-03 18:23:24

+0

我以爲相同,但即使語法突出顯示「UIViewAnimationOptionBeginFromCurrentState」不適用於我,所以我決定只使用塊而不是來自CurrentState的簡單動畫。 (如果您決定在iOS4之前支持舊版本,則必須使用此方法) – 2011-01-03 18:26:07

+0

好的,我會盡快完成此嘗試。 – Rits 2011-01-03 18:27:12

0

看起來像這是你問我剛剛回答的另一個問題的衍生物,但同樣的想法適用。

你不需要使用塊來做到這一點。只需將您的setCenter包裝在UIView動畫中即可。像這樣:

[UIView beginAnimations:nil context:NULL] 
[UIView setAnimationDuration:0.2f]; 
cursorView.center = locationOfTouch; 
[UIView commitAnimations]; 

請記住,0.2秒是非常快的。它可能出現「跳」到位置。要確認,請將持續時間設置爲2.0秒,看看它是否具有動畫效果。

此致敬禮。

0

從技術上講,視圖應該自動生成動畫,默認時間爲0.25秒。這就是手冊所說的,但是,我現在在這裏,因爲這些手冊在動畫方面似乎不太準確。

此外,beginAnimations呼叫被淘汰,你可能想使用一個CATransaction代替