我想要動畫我用Paintcode(偉大的應用程序,順便說一句)所做的貝塞爾曲線,並繪製在「drawRect」方法中的自定義UIView。動畫貝塞爾曲線點
繪圖工作正常,但我想要在貝塞爾曲線中爲單個點設置動畫。
這裏是我的非工作方法:
-(void)animateFlame{
NSLog(@"Animating");
// Create the starting path. Your curved line.
//UIBezierPath * startPath;
// Create the end path. Your straight line.
//UIBezierPath * endPath = [self generateFlame];
//[endPath moveToPoint: CGPointMake(167.47, 214)];
int displacementX = (((int)arc4random()%50))-25;
int displacementY = (((int)arc4random()%30))-15;
NSLog(@"%i %i",displacementX,displacementY);
UIBezierPath* theBezierPath = [UIBezierPath bezierPath];
[theBezierPath moveToPoint: CGPointMake(167.47, 214)];
[theBezierPath addCurveToPoint: CGPointMake(181+displacementX, 100+displacementY) controlPoint1: CGPointMake(89.74, 214) controlPoint2: CGPointMake(192.78+displacementX, 76.52+displacementY)];
[theBezierPath addCurveToPoint: CGPointMake(167.47, 214) controlPoint1: CGPointMake(169.22+displacementX, 123.48+displacementY) controlPoint2: CGPointMake(245.2, 214)];
[theBezierPath closePath];
// Create the shape layer to display and animate the line.
CAShapeLayer * myLineShapeLayer = [[CAShapeLayer alloc] init];
CABasicAnimation * pathAnimation = [CABasicAnimation animationWithKeyPath:@"path"];
pathAnimation.fromValue = (__bridge id)[bezierPath CGPath];
pathAnimation.toValue = (__bridge id)[theBezierPath CGPath];
pathAnimation.duration = 0.39f;
[myLineShapeLayer addAnimation:pathAnimation forKey:@"pathAnimation"];
bezierPath = theBezierPath;
}
利用這一點,在任何屏幕上移動的。生成的隨機位移很好,bezierPath變量是一個用類作用域聲明的UIBezierPath。
我錯過了什麼嗎? (我們的目標是做一個排序蠟燭般的動畫)
謝謝! 我仍然無法使用你的方法啓動並運行一個動畫塊和一個CAShapeLayer(沒有任何事情發生,我試過各種東西) 我最終的解決方案是使用一個定時器並調用setNeedsDisplay,現在我我將自己管理動畫。 –
很高興你在最後工作。 – Fogmeister