我正在CAShapeLayer.And上工作,试图绘制非线性路径,我想将帧设置为CAShapeLayer.So,我可以使用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]; ` 请仔细参考我的代码,.I已经设置了相同的框架和界限,CAShapeLayer.My问题是如果我没有设置边界(与框架相同),那么它就不会显示我的内容,或者它不会在frame.Why?Please帮助下显示内容。
发布于 2013-12-30 09:16:04
当您修改一个frame的CALayer时,您正在修改它在其上层的坐标空间中的大小和位置。frame是一个计算值,基于对象的bounds和position。在这种情况下,该层还没有一个上层,因此它的坐标空间是无量纲的。当您设置frame时,大小会传递到bounds属性,但是由于无量纲空间中的任何点都是零,所以位置将保持为零,而不是您想要的位置。
要解决这个问题,您可以将bounds设置为设置层的大小,并将position (这是一个真实的非计算属性)设置在上层的坐标空间中,然后将其添加为子层。
发布于 2013-12-30 06:53:29
以下是CALayer文档的引文:
框矩形是在上层坐标空间中指定的层的位置和大小。对于层,框架矩形是从边界、anchorPoint和位置属性中的值派生的计算属性。当为此属性分配新值时,该层将更改其位置和边界属性,以与指定的矩形匹配。矩形中每个坐标的值以点为单位。
与CAShapeLayer类似,当单独设置frame时,它不会保留来自指定的CGRect的原始值,只保留大小。当您设置bounds时,原点保持不变,因此显示在适当的位置。还需要将位置值设置为要显示形状的中心点:
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 layer];
arcLayer.path = path;
CGRect pathRect = CGPathGetPathBoundingBox(path);
arcLayer.bounds = pathRect;
arcLayer.position = CGPointMake(CGRectGetMidX(pathRect), CGRectGetMidY(pathRect));
[self.layer addSublayer:arcLayer];发布于 2013-12-30 11:58:19
根据我的经验,设置position的CAShapeLayer是完全足够的,它显示在您想要的地方。为此,不需要设置bounds。
请参阅CoreAnimationText示例代码,以便以这种方式使用。
https://stackoverflow.com/questions/18955210
复制相似问题