2012-04-26 9 views
0

最初は画面全体がマスクされているような効果を出そうとしています。ボールがスクリーンを横切って移動すると、ボールはそのボールの領域をアンマスクし、その領域はマスクされずに残る。マスク・アニメーションで画像のマスクを解除し続ける

CALayer * ball = [CALayer layer]; 
ball.bounds = CGRectMake(0, 0, 42, 42); 
ball.position = [[[alphabet controls] objectAtIndex:0] CGPointValue]; 
ball.contents = (id)([UIImage imageNamed:@"done.png"].CGImage); 
[self.layer addSublayer:ball]; 

[self.layer setMask:ball]; 

CAKeyframeAnimation *anim = [CAKeyframeAnimation animationWithKeyPath:@"position"]; 
anim.path = path; 
anim.repeatCount = HUGE_VALF; 
anim.duration = 8.0; 
[ball addAnimation:anim forKey:@"race"]; 

このアニメーションは、マスク全体のビューを、ボール層の背後にあるものだけを示しています

は、私は、次のコードを持っています。 私の質問は次のとおりです:スクリーンのどの部分が明らかにされたままにしておくことができますか?

答えて

0

Hmmm。

あなたが望むのは、ボールの形をしたすべてのピクセルを含む画像です。

フレームベースのアニメーションでボールをアニメートする場合は、グレースケール(または1ビット)イメージを作成し、それをマスクレイヤーのコンテンツとしてインストールすることができます。ボールを動かすと、フレームごとにマスクイメージに描画できます。

コアアニメーションと同じ効果を得る方法がわかりません。

マスクをCAShapeLayerにし、ボールのパス全体を表すCGPathを作成し、シェイプレイヤーのパスにすることができます。ボールが丸い場合は、シェイプレイヤの線の太さをボールのサイズに設定できます。それはうまくいくでしょう。あなたがボールが不規則な形をしていても、そのアプローチはうまくいかないでしょう。 iOSのクォーツグラフィックスには、任意の形状のブラシを使用してパスを描画する方法はわかりません。

関連する問題