CAShapeLayer的转型

时间:2013-09-20 05:29:05

标签: ios cabasicanimation

我使用CAShapeLayer绘制四分之一圆。单击我想将其变换90度。但是当我这样做时,图层正在变换并且正在离开屏幕。我需要围绕中心点旋转。让我们看看假设中心点是(100,100)。 这是我的代码:

CGMutablePathRef path = CGPathCreateMutable();
//CGPathMoveToPoint(path, NULL, self.bounds.size.width/2, self.bounds.size.height/2);
CGPathAddArc(path, NULL, self.bounds.size.width/2, self.bounds.size.height/2, 100, (0), (M_PI_2), NO);
CGPathAddArc(path, NULL, self.bounds.size.width/2, self.bounds.size.height/2, 100-50, (M_PI_2), (0), YES);
CGPathCloseSubpath(path);

CAShapeLayer* arcLayer = [[CAShapeLayer alloc]init];
arcLayer.path = path;
arcLayer.fillColor = [UIColor yellowColor].CGColor;

[self.layer addSublayer:arcLayer];

动画代码:

  CABasicAnimation *spin = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];

        spin.removedOnCompletion = NO;

        spin.fillMode = kCAFillModeForwards;

        [spin setByValue:[NSNumber numberWithFloat:M_PI_2]];
        //layer.affineTransform = CGAffineTransformMakeRotation(M_PI_2);
        [spin setDuration:1.0];
        [layer addAnimation:spin forKey:@"transform.rotation"];

请帮帮我。

2 个答案:

答案 0 :(得分:3)

您遇到的问题是因为图层没有大小。您仍然可以看到路径,因为它没有剪切到图层的边界。旋转相对于图层的中心应用,但没有在其自己的坐标系中(0,0)的大小(与路径使用的坐标系相同)。

通过设置强背景颜色(不是填充颜色)并为图层指定任意帧,您可以看到我的意思。您想要的最终帧很可能是路径的边界框。

此时您应该看到视图围绕预期点旋转。现在,您可以再次删除背景颜色。

答案 1 :(得分:0)

尝试在动画之前设置图层的锚点。例如:

    layer.anchorPoint = CGPointMake(0.5f, 0.5f);

(0,0)是图层的左上角,(1,1)是右下角。