1

私は単純な長方形を描き、エッジの色をアニメーション化しようとしています。のリンクを使用してみましたが、まだ役に立ちません。レイヤーの境界線の色を変更してアニメーション化することで、最終的に修正しました。それはうまくいきました。

strokeColorレイヤーで機能するようになっているため、KVOはありますかbackgroundColor

iOS SDK 6.1を実行しているXCode 4.6を使用しています

これは私がやっていることです:

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, 2.0);
CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);

CABasicAnimation *strokeAnim = [CABasicAnimation animationWithKeyPath:@"strokeColor"];
strokeAnim.fromValue         = (id) [UIColor redColor].CGColor;
strokeAnim.toValue           = (id) [UIColor greenColor].CGColor;
strokeAnim.duration          = 3.0;
strokeAnim.repeatCount       = 0;
strokeAnim.autoreverses      = YES;
[self.layer addAnimation:strokeAnim forKey:@"animateStrokeColor"];

CGContextMoveToPoint(context, 0, 0);
CGContextAddLineToPoint(context, squareLength, 0);
CGContextAddLineToPoint(context, squareLength, squareLength);
CGContextAddLineToPoint(context, 0, squareLength);
CGContextAddLineToPoint(context, 0, 0);
CGContextStrokePath(context);
4

2 に答える 2

0

tl;dr; あなたはおそらく意味した@"borderColor"


ビューでオーバーライドしない限り+ (Class)layerClass(オーバーライドしたとは思えません)、ビューのレイヤーはプロパティCALayerを持たないインスタンスになりstrokeColorます。

CAShapeLayer を使用することもできますが、CALayer にborderColorはおそらく探していたプロパティがあるため、ストロークのためだけにそれを行うべきではありません。

したがって、私のアドバイスは、borderColor代わりにアニメーション化することです。


あなたの質問とはあまり関係ありません:

drawRect:投稿したコードから、ビューの実装内にアニメーションを追加しているように見えます。この方法は実際の描画にのみ使用する必要があり、アニメーション コードを別の場所に移動することを強くお勧めします。このメソッドは、ビューが再描画されるたびに呼び出され、新しいアニメーションを追加するには頻繁に行われる可能性があります。

于 2013-10-19T14:11:58.677 に答える