我正在研究 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 设置了相同的框架和边界。我的问题是如果我没有设置边界(与框架相同),那么它不会显示我的内容或者它不会在框架内显示我的内容。为什么?请帮助我。谢谢。
最佳答案
当您修改CALayer
的frame
时,您就是在修改它在其超层坐标空间中的大小和位置。 frame
是一个计算值,基于对象的 bounds
和 position
。在这种情况下,该层还没有超层,因此它的坐标空间是无量纲的。当您设置 frame
时,大小会传递给 bounds
属性,但由于无量纲空间中的任何点都为零,因此位置将保持为零,而不是您设置的位置有意的。
为了解决这个问题,你可以设置bounds
来设置层的大小,以及position
(这是一个真正的非计算属性)在坐标空间 super 层,然后将其添加为子层。
关于ios - CAShapeLayer 的框架和边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18955210/