如何让CAShapeLayer的框架面对其超级视图?

时间:2016-10-12 07:35:06

标签: ios objective-c uibezierpath cashapelayer

有人可以帮助我获取在UIImageView中作为SubLayer添加的CAShapeLayer框架吗?

以下是我的相同代码:

CAShapeLayer  *shapeLayer = [[CAShapeLayer alloc] init];
shapeLayer.fillColor = [[UIColor redColor] colorWithAlphaComponent:0.15].CGColor;
shapeLayer.strokeColor = [UIColor redColor].CGColor;
shapeLayer.lineWidth = 3.0;
shapeLayer.zPosition = 1;
[_imgBackground.layer insertSublayer:shapeLayer atIndex:1];

UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(50, 50)]; // left top point of rack
[path addLineToPoint:CGPointMake(100, 50)]; // right top point of rack
[path addLineToPoint:CGPointMake(100, 100)]; // right bottom point of rack
[path addLineToPoint:CGPointMake(50, 100)]; // left bottom point of rack
[path closePath]; // closing rectangle/path

shapeLayer.path = path.CGPath;

据我所知,我们可以从以下行获得框架:

CGRect bounds = CGPathGetBoundingBox(shapeLayer.path);

但它只根据self.view

返回帧

我希望它的框架符合UIImageView。

提前致谢。

1 个答案:

答案 0 :(得分:2)

我从詹姆斯的评论中得到了答案。以下行保存了我的一天:

CGRect bounds = [self.view convertRect:CGPathGetBoundingBox(shapeLayer.path) toView:_imgBackground];

来自this参考。