2013-02-04 102 views
0

我想通過在動畫塊中增加UIView的x屬性來在屏幕上移動UIView。我希望元素不斷移動,因此我不能只指定結尾x並延長持續時間。UIView上的平滑幀動畫

此代碼有效,但非常不穩定。在模擬器中看起來不錯,但在設備上起伏不定。

-(void)moveGreyDocumentRight:(UIImageView*)greyFolderView 
{ 
[UIView animateWithDuration:0.05 delay:0 options:UIViewAnimationOptionAllowUserInteraction animations:^{ 
    NSInteger newX = greyFolderView.frame.origin.x + 5.0; 
    greyFolderView.frame = CGRectMake(newX, greyFolderView.frame.origin.y, greyFolderView.frame.size.width, greyFolderView.frame.size.height); 
    } 
} completion:^(BOOL finished) { 
    [self moveGreyDocumentRight:greyFolderView]; 
}]; 

}

+0

請參閱:http://stackoverflow.com/questions/5690141/how-to-do-a-continuous-recycling-uiview-animation – magma

+0

如果您只是在兩個位置之間來回移動,則「 UIViewAnimationOptionAutoreverse'和'UIViewAnimationOptionRepeat'爲標準的'animateWithDuration:delay:options:animations:completion:'block animation將完成這項工作。將它與'UIViewAnimationOptionCurveEaseInOut'結合起來,並且「轉身」過程也將順利進行。如果您想做其他事情(例如,不在兩個地點之間),請告訴我們,我們可以建議其他選擇。 – Rob

回答

3

你在這裏戰鬥的視圖動畫。每個動畫都包含一個UIViewAnimationOptionCurveEaseInOut時序曲線。這意味着,每0.05秒你嘗試提高你的速度,然後減慢你的速度,然後改變到別的地方。

第一個也是最簡單的解決方案可能會通過選項UIViewAnimationOptionCurveLinear更改爲線性定時。這就是說,每5ms製作一個新的動畫確實與Core Animation的角度相沖突,使代碼變得複雜並且損害了性能。發送幀到你的地方目前想要它去。無論何時你想將它送到其他地方(即使它仍然在動畫),將它發送到通過選項UIViewAnimationOptionBeginFromCurrentState的新地方。它會自動適應新的目標。如果您希望它重複動畫或來回彈跳,請使用重複選項(UIViewAnimationOptionRepeatUIViewAnimationOptionAutoreverse)。

+0

這正是解決方案。動畫每0.05秒一點都不是問題。非常光滑和性感:) – kgibbon