9

私は、CAReplicatorlayer、CATextLayer、および非常に基本的なアニメーションを使用して、クールなテキスト効果を作成しようとしています。画面の上部から文字がドロップされているように見せようとしています。その後、クールなレプリケーターが表示されなくなります。私はなんとかこの効果を行うことができましたが、完全ではありません。

これまでのところ、これは私が持っているものです:

CATextLayer *messageLayer = [CATextLayer layer];

[messageLayer setForegroundColor:[[UIColor blackColor] CGColor]];
[messageLayer setContentsScale:[[UIScreen mainScreen] scale]];
[messageLayer setFrame:CGRectMake(0, 0, 40, 40)];
[messageLayer setString:@"A"];


CAReplicatorLayer *replicatorX = [CAReplicatorLayer layer];

//Set the replicator's attributes
replicatorX.frame = CGRectMake(0, 0, 40, 40);
replicatorX.anchorPoint = CGPointMake(0,0);
replicatorX.position = CGPointMake(0, 0);
replicatorX.instanceCount = 9;
replicatorX.instanceDelay = 0.15;
replicatorX.instanceAlphaOffset = -0.1;

replicatorX.zPosition = 200;
replicatorX.anchorPointZ = -160;

[replicatorX addSublayer:messageLayer];

[self.view.layer addSublayer:replicatorX];


messageLayer.position = CGPointMake(40, 400);
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position.y"];
animation.fromValue = [NSNumber numberWithInt:0];;
animation.toValue = [NSNumber numberWithInt:400];
animation.duration = 3;
[messageLayer addAnimation:animation forKey:@"s"];

私には2つの問題があります:

  1. 複製されたレイヤーはエンドポイントから始まります。
  2. メインレイヤーが最後のアニメーションポイントに到達すると、アニメーションが停止し、複製されたレイヤーはアニメーションを終了できません。
4

1 に答える 1

5

アニメーションオブジェクトのfillModeプロパティとremovedOnCompletionプロパティに正しい値を設定すると、問題が解決することが期待されます。

「複製されたレイヤーはエンドポイントから開始しています。」

これは、プロパティに割り当てられた値が原因instanceDelayで、例ではアニメーションが0.15秒遅れます。fromValueからアニメーションを表示するには、アニメーションのfillModeをkCAFillModeBackwardsに設定して、この遅延を考慮する必要があります。

animation.fillMode = kCAFillModeBackwards;

「メインレイヤーが最後のアニメーションポイントに到達すると、アニメーションが停止し、複製されたレイヤーはアニメーションを終了できませんでした。」

これは、デフォルトで「アニメーションは完了時にターゲットレイヤーのアニメーションから削除される」ために発生します。1。アニメーション属性removeedOnCompletionをNOに設定することで、このデフォルトの動作をオーバーライドできます。

animation.removedOnCompletion = NO;

お役に立てれば。:)

于 2012-10-05T23:30:25.930 に答える