私はコアアニメーションに近づき、経験的に描画します。 シンプルな図形をアニメーション化しようとしています。問題の形状は、3本の線とベジェ曲線によって形成される。カーブコントロールポイントを表示するために、赤い線も描画されます。CoreAnimationでシェイプをアニメーション化する
alt text http://img.skitch.com/20091119-1ufar435jdq7nwh8pid5cb6kmm.jpg
私のメインコントローラは、単純にこのサブビューを追加し、いつでもtouchesEnd
adjustWave
メソッドを呼び出します。 私の図形描画クラスのコードは次のとおりです。ご覧のように、クラスには1つのプロパティcp1x(ベジェコントロールポイント1のx)があります。これはアニメーション化したい値です。マインド、これはダムの試みです...
- (void)drawRect:(CGRect)rect {
float cp1y = 230.0f;
float cp2x = 100.0f;
float cp2y = 120.0f;
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextClearRect(ctx, rect);
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, NULL, 10.0f, 200.0f);
CGPathAddCurveToPoint (path, NULL, cp1x, cp1y, cp2x, cp2y, 300.0f, 200.0f);
CGPathAddLineToPoint(path, NULL, 300.0f, 300.0f);
CGPathAddLineToPoint(path, NULL, 10.0f, 300.0f);
CGPathCloseSubpath(path);
CGContextSetFillColorWithColor(ctx, [UIColor blueColor].CGColor);
CGContextAddPath(ctx, path);
CGContextFillPath(ctx);
// Drawing a line from control points 1 and 2
CGContextBeginPath(ctx);
CGContextSetRGBStrokeColor(ctx,1,0,0,1);
CGMutablePathRef cp1 = CGPathCreateMutable();
CGPathMoveToPoint(cp1, NULL, cp1x, cp1y);
CGPathAddLineToPoint(cp1, NULL, cp2x, cp2y);
CGPathCloseSubpath(cp1);
CGContextAddPath(ctx, cp1);
CGContextStrokePath(ctx);
}
- (void)adjustWave {
[UIView beginAnimations:@"movement" context:nil];
[UIView setAnimationDelegate:self];
[UIView setAnimationWillStartSelector:@selector(didStart:context:)];
[UIView setAnimationDidStopSelector:@selector(didStop:finished:context:)];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView setAnimationDuration:3.0f];
[UIView setAnimationRepeatCount:3];
[UIView setAnimationRepeatAutoreverses:YES];
cp1x = cp1x + 20.0f;
[UIView commitAnimations];
}
形状は変わりません。逆にCAコードを取り出し、最後のメソッドでシンプルな `[self setNeedsDisplay]を追加すると、形状は変わりますが、明らかにCAはありません。 お手伝いできますか?私はここで非常に基本的な間違いをしていると確信しています... 事前に感謝、 Davide
Bradによると、CachasicAnimationまたはCAKeyframeAnimationを構築し、 'path'プロパティでアニメーション化することで、CAShapeLayerクラスを使用して任意のシェイプをアニメーション化できます。あなたがサンプルコードをチェックしたいなら、私はこのクラスについての投稿を書いた。 http://bit.ly/shapelayer –