ios - CAShapeLayer 的框架和边界

标签 ios cgpath cashapelayer

我正在研究 CAShapeLayer。并尝试绘制非线性路径。我想将框架设置为 CAShapeLayer。所以我可以使用 CGPathGetPathBoundingBox 方法从 CGPathRef 获取帧。

代码如下:

CGMutablePathRef path = CGPathCreateMutable();
CGPathAddArc(path, NULL, rect.size.width/2, rect.size.height/2, 100, (0), (M_PI_2), NO);
CGPathAddArc(path, NULL, rect.size.width/2, rect.size.height/2, 100-50, (M_PI_2), (0), YES);
CGPathCloseSubpath(path);
CAShapeLayer* arcLayer = [[CAShapeLayer alloc]init];
arcLayer.path = path;
arcLayer.frame = CGPathGetPathBoundingBox(path);
arcLayer.bounds = CGPathGetPathBoundingBox(path);
[self.layer addSublayer:arcLayer]; ` 

请仔细引用我的代码。我已经为 CAShapeLayer 设置了相同的框架和边界。我的问题是如果我没有设置边界(与框架相同),那么它不会显示我的内容或者它不会在框架内显示我的内容。为什么?请帮助我。谢谢。

最佳答案

当您修改CALayerframe 时,您就是在修改它在其超层坐标空间中的大小和位置。 frame 是一个计算值,基于对象的 boundsposition。在这种情况下,该层还没有超层,因此它的坐标空间是无量纲的。当您设置 frame 时,大小会传递给 bounds 属性,但由于无量纲空间中的任何点都为零,因此位置将保持为零,而不是您设置的位置有意的。

为了解决这个问题,你可以设置bounds来设置层的大小,以及position(这是一个真正的非计算属性)在坐标空间 super 层,然后将其添加为子层。

关于ios - CAShapeLayer 的框架和边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18955210/

相关文章:

ios - 获取具有 Alpha channel 的图像的 CGPath

ios - 带轮廓的 CGPath

swift - 如何为 CGpath 数组的绘制设置动画?

ios - 如何在中心点旋转 CAShapeLayer

iPhone 如何使用 NSPredicate 按父实体过滤核心数据?

iphone 删除下一个字符串 - 在特定字符串出现后保留字符串的其余部分

ios - 不能在 UICollectionViewCell 上设置阴影和圆角。一次只能做一件作品

ios - 边框未应用于全 View

ios - 在 iOS 中缓存异步响应

ios - 核心数据 :Fetch rlelationships or Fetch Main Entity