2013-05-21 43 views
0

我目前正在開發一個iOS應用程序。在應用程序中,我使用uiview animatewithduration從屏幕頂部下降了塊(UIView)。我期待在他們下降的時候,他們會以指數的速度變快。有沒有辦法使用animatewithduration來做到這一點,或者有另一種方法可以達到同樣的效果嗎?animatewithduration指數式得到更快

+0

如果沒有內置定時功能,滿足您的需求,創建自定義定時CAKeyFrameAnimation。 – Till

回答

0

您可以使用完成塊中的變量來增加持續時間並調用動畫。這將是一種簡單而有效的方式來完成你所要求的。

[UIView animateWithDuration:someVariable animations:^{ 

// Animation 

} 
completion:^ (BOOL finished) 
{ 
    if (finished) { 
     // Increment your someVariable here 
     // Then just call this holding method again 
    } 
}]; 
+0

但我只是在下一個 – BDGapps

+0

之上添加一個動畫,可能是粒子發射器? https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CAEmitterLayer_class/Reference/Reference.html –

+0

如果你變得非常複雜,我會推薦Cocos2d,因爲它的設計正好適合那些類型的東西,允許更多(更簡單)的功能和優化的性能。 –

0

您可以使用自定義計時功能的CAAnimations來做到這一點。一個小例子:

CAMediaTimingFunction *timing = [[CAMediaTimingFunction alloc] initWithControlPoints:1 :0.1 :1 :0.9]; 
CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"transform.translation.y"]; 
anim.timingFunction = timing; 
anim.duration = 0.4; 
anim.toValue = [NSNumber numberWithFloat:480]; 
[view.layer addAnimation:anim forKey:nil]; 
+0

好極了,請解釋一下這些是initWithControlPoints:1:0.1:1:0.9];謝謝 – BDGapps

+0

這是一個三次[beziercurve]的控制點(https://en.wikipedia.org/wiki/Bézier_curve)。你可以使用這個不錯的[在線工具](http://cubic-bezier.com)參數來獲得你想要的曲線。 –

+0

它正在工作,但是當速度小於20秒時它會跳躍並且不是一個平滑的動作 – BDGapps