首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CAShapeLayer的帧与界

CAShapeLayer的帧与界
EN

Stack Overflow用户
提问于 2013-09-23 08:53:00
回答 4查看 14.6K关注 0票数 13

我正在CAShapeLayer.And上工作,试图绘制非线性路径,我想将帧设置为CAShapeLayer.So,我可以使用CGPathGetPathBoundingBox方法从CGPathRef获得帧。

这里是代码:

代码语言:javascript
运行
复制
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帮助下显示内容。

EN

回答 4

Stack Overflow用户

发布于 2013-12-30 09:16:04

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

要解决这个问题,您可以将bounds设置为设置层的大小,并将position (这是一个真实的非计算属性)设置在上层的坐标空间中,然后将其添加为子层。

票数 17
EN

Stack Overflow用户

发布于 2013-12-30 06:53:29

以下是CALayer文档的引文:

框矩形是在上层坐标空间中指定的层的位置和大小。对于层,框架矩形是从边界、anchorPoint和位置属性中的值派生的计算属性。当为此属性分配新值时,该层将更改其位置和边界属性,以与指定的矩形匹配。矩形中每个坐标的值以点为单位。

与CAShapeLayer类似,当单独设置frame时,它不会保留来自指定的CGRect的原始值,只保留大小。当您设置bounds时,原点保持不变,因此显示在适当的位置。还需要将位置值设置为要显示形状的中心点:

代码语言:javascript
运行
复制
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];
票数 10
EN

Stack Overflow用户

发布于 2013-12-30 11:58:19

根据我的经验,设置positionCAShapeLayer是完全足够的,它显示在您想要的地方。为此,不需要设置bounds

请参阅CoreAnimationText示例代码,以便以这种方式使用。

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

https://stackoverflow.com/questions/18955210

复制
相关文章

相似问题

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