2011-10-10 90 views
0

在我的應用程序中,我想移動一個小小的UIImageView在.png中;這是一隻小昆蟲,我想模擬他的飛行。舉例來說,我希望這個PNG在移動一個倒八時作爲無限simbol∞IOS:移動UIImageView

回答

2

您可以使用CoreAnimation。您可以爲視圖創建子類,爲昆蟲創建子視圖,然後按照定義的路徑爲其分配動畫。

你的UIImageView可以動畫。如果它是一隻蒼蠅,你可以爲翼移動做了幾幀:

NSArray *images = [NSArray arrayWithObjects:..., nil]; 

insect.animationImages = images; 
insect.animationDuration = ??; 
insect.animationRepeatCount = 0; 
[insect startAnimating]; 

然後爲昆蟲的初始化幀:

insect.frame = CGRectMake(-120, 310, [[images objectAtIndex:0] size].width, [[images objectAtIndex:0] size].height); 

,然後定義路徑:

CGMutablePathRef aPath; 
CGFloat arcTop = insect.center.y - 50; 
aPath = CGPathCreateMutable(); 

CGPathMoveToPoint(aPath, NULL, insect.center.x, insect.center.y); 
CGPathAddCurveToPoint(aPath, NULL, insect.center.x, arcTop, 240, -100, 490, 360); 

CAKeyframeAnimation* arcAnimation = [CAKeyframeAnimation animationWithKeyPath: @"position"]; 
arcAnimation.repeatCount = HUGE_VALF; 
[arcAnimation setDuration: 4.5]; 
[arcAnimation setAutoreverses: NO]; 
arcAnimation.removedOnCompletion = NO; 
arcAnimation.fillMode = kCAFillModeBoth; 
[arcAnimation setPath: aPath]; 
CFRelease(aPath); 
[insect.layer addAnimation: arcAnimation forKey: @"position"]; 

我離開了如何去做無限循環路徑:)

希望它有幫助!

+0

我無法做一個循環路徑,你能幫助我嗎? – CrazyDev

+1

看看這個:http://developer.apple.com/library/ios/#documentation/2DDrawing/Conceptual/DrawingPrintingiOS/BezierPaths/BezierPaths.html //你必須使用兩個半圓和兩條線(at至少對於更簡單的∞版本)。在此圖像中:http://twitpic.com/6yynco每條彩色線代表需要創建的路徑線。 –

0

通常情況下,如果你要移動東西,我建議使用[UIView動畫...]。但是,您希望在複雜的曲線路徑上移動。相反,我建議提出一個公式,給出昆蟲的(x,y)作爲時間的函數,然後以相當小的時間間隔開始一個NSTimer,並且每次獲得更新時,移動昆蟲(也許使用[UIView animate ...])。

另一種方法是使用2-d動畫框架,例如cocos2d - 然後,您可以獲得與幀刷新率鏈接的'更新'調用,在該更新調用中您更新了昆蟲的位置與上面相同的方程。