使用CAReplicatorLayer

时间:2011-09-28 12:07:17

标签: iphone ios animation core-animation careplicatorlayer

我一直在尝试使用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"];

我有两个问题:

  1. 复制的图层从终点开始。
  2. 当主图层到达最后一个动画点时,动画停止,复制的图层无法完成动画。

1 个答案:

答案 0 :(得分:5)

为动画对象的fillMode和removedOnCompletion属性设置正确的值有望解决您的问题:

  

“复制的图层从终点开始。”

这是由分配给instanceDelay属性的值引起的,在您的示例中,该属性会使动画延迟0.15秒。要从fromValue显示动画,您需要通过将动画的fillMode设置为kCAFillModeBackwards来解释此延迟。

animation.fillMode = kCAFillModeBackwards;
  

“当主图层到达最后一个动画点时,动画停止   并且复制的图层无法完成动画。“

这是因为默认情况下“完成后动画将从目标图层的动画中删除。”1。您可以通过将animation属性removedOnCompletion设置为NO来覆盖此默认行为。

animation.removedOnCompletion = NO;

希望这会有所帮助。 :)