1

我正在尝试将 CALayer 用于动画。我想要的是缩小和反弹的圆圈(有效)和一个像这样扩展和淡出的描边圆圈。不幸的是 subLayer 上的第二个环没有动画。我不确定为什么。

我像这样设置我的图层

- (void)setLayerProperties {
    //The view’s Core Animation layer used for rendering.
    CAShapeLayer *layer = (CAShapeLayer *)self.layer;

    UIBezierPath *bezierPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)
                                                      byRoundingCorners:UIRectCornerAllCorners
                                                            cornerRadii:self.frame.size];
    layer.path = bezierPath.CGPath;
    layer.fillColor = _Color.CGColor;

    rippleLayer = [[CAShapeLayer alloc] init]; // update from Andrea's answer
    layer.path = bezierPath.CGPath;
    layer.strokeColor = [UIColor blueColor].CGColor;
    [layer addSublayer:rippleLayer];
}

然后我制作动画然后使用这些功能

- (void)pop{
    CABasicAnimation *animation = [self animationWithKeyPath:@"transform.scale"];
    [animation setFromValue:[NSNumber numberWithFloat:1.0f]];
    [animation setToValue:[NSNumber numberWithFloat:0.8f]];
    [animation setRemovedOnCompletion:YES];
    [animation setDuration:0.15];
    [animation setAutoreverses:YES];

    [self.layer addAnimation:animation forKey:animation.keyPath];

    rippleLayer.anchorPoint = CGPointMake(1, 1);
    CABasicAnimation *scale = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
    [scale setFromValue:[NSNumber numberWithFloat:1.0f]];
    [scale setToValue:[NSNumber numberWithFloat:2.0f]];
    [scale setRepeatCount:1];
    [scale setDuration:1.0f];
    //r[scale setRemovedOnCompletion:YES];
    [scale setFillMode:kCAFillModeForwards];

    [rippleLayer addAnimation:scale forKey:scale.keyPath];
}
4

1 回答 1

2

似乎您正在将rippleLayer 创建为普通的CALayer,而不是CAShapeLayer。据我所知,路径不是 CALayer 的属性,并且您提供的路径与以前相同。因此,您正在添加一个根本没有内容的简单图层。

于 2013-11-10T20:14:56.523 回答