首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CAShapeLayer变换

CAShapeLayer变换
EN

Stack Overflow用户
提问于 2013-09-20 05:29:04
回答 2查看 1.8K关注 0票数 2

我正在用CAShapeLayer.On单点击画一个四分之一圆,我想把它转换成90 degree.But,图层正在转换,正在脱离屏幕,我需要围绕中心点旋转,假设中心点是(100,100)。这是我的代码:

代码语言:javascript
复制
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];

动画代码:

代码语言:javascript
复制
  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"];

请帮帮我。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-20 08:30:10

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

通过设置一个强的背景色(而不是填充颜色)并给图层一个任意的框架,你可以明白我的意思。您想要的最后一个框架很可能是路径的边框。

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

票数 3
EN

Stack Overflow用户

发布于 2013-09-20 06:44:25

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

代码语言:javascript
复制
    layer.anchorPoint = CGPointMake(0.5f, 0.5f);

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18909435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档