2011-02-24 136 views
0

我在iPad上遇到性能問題。我需要用動畫拖動UIView。這就像自制的UIScrollView,但有更大的彈跳效果。iPad自制移動動畫

我使用NSTimer(scheduletTimerWithInterval 0.3秒)自制的動畫循環。在每次迭代中,我將逐步移動視圖。

但問題在於它會一直凍結。沒有太多...但足以感覺..有沒有人知道任何方法來正確地跟蹤事情,所以它會作爲魅力?

在此先感謝!

+0

我相信這不是因爲每次迭代計算的算法。因爲如果我將主視圖移動到屏幕大小的一半左右(因此只能看到滑動視圖的一半部分),它可以順利運行。有誰知道標準核心動畫是如何工作的?它內部是否有類似的東西(NSTimer)? – Dmitry 2011-02-25 13:18:27

+0

我發現了一件事 - 如果您將攔截事件touchesMoved並將移動某個視圖,您會看到它的性能不佳(視圖在移動時呈現抽動)。但是當你在UIScrollView中做同樣的事情時,視圖平穩地移動。那麼,它的UIScrollView如何工作? – Dmitry 2011-02-25 18:06:16

回答

1

您應該使用[UIView beginAnimations]而不是計劃的計時器。例如,移動的東西超過2秒,你可以做這樣的事情:

YourView.center = CGPointMake(0,0); 
[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:2]; 
YourView.center = CGPointMake(30, 30); 
[UIView commitAnimations]; 

這會從0,0移動YourView到30,30超過2秒(這是setAnimationDuration是什麼)。所以如果你想做一個反彈效果,你會有一系列的這些。當動畫使用

[UIView setAnimationDidStopSelector:@selector(somefunction)]

此時,你可以在你的函數「somefunction」揭開序幕另一個動畫完成,您也可以收到通知。

+0

我使用這種方法的問題是我應該製作大量的動畫塊。因爲我有非常具體的軌跡.. – Dmitry 2011-02-25 12:17:01

+0

德米特里,你有沒有解決這個問題?自從我上次回答以來,我發現了UIBezierPath動畫,看看能否幫助你。檢查出來:http://maniacdev.com/2011/01/core-animation-defining-and-following-paths/ – Mirkules 2011-04-05 00:00:24

0

也許計時器導致你的問題。動畫的間隔應該是這樣的:1.0/60.0f

+0

好點。但仍然沒有 – Dmitry 2011-02-25 12:19:20