Uiview 嵌套的CAShapeLayer§;得到来源?

Uiview 嵌套的CAShapeLayer§;得到来源?,uiview,nested,calayer,cashapelayer,cgpoint,Uiview,Nested,Calayer,Cashapelayer,Cgpoint,NSLog输出为0.0:0.0,0.0:0.0 为其嵌套的形状层被强烈实例化为属性。但是,我无法从框架中获取原点、宽度或高度 编辑:进一步挖掘后,我没有为我的CAShapeLayer设置框架-因为它是由路径绘制的 然而,我现在如何适应这一点,使它的起源能够从路径的开始抓取 for (CALayer *layer in self.view.layer.sublayers) { if ([layer isKindOfClass:[CAShapeLayer class]]) {

NSLog输出为
0.0:0.0,0.0:0.0

为其嵌套的形状层被强烈实例化为属性。但是,我无法从框架中获取原点、宽度或高度

编辑:进一步挖掘后,我没有为我的CAShapeLayer设置框架-因为它是由路径绘制的

然而,我现在如何适应这一点,使它的起源能够从路径的开始抓取

for (CALayer *layer in self.view.layer.sublayers) {
    if ([layer isKindOfClass:[CAShapeLayer class]]) {
        CAShapeLayer *copy = (CAShapeLayer *)layer;

        if ([copy.name isEqualToString:@"datumSideLayer"]) {
            //get start position, get height, get width

            CGPoint startPos = copy.frame.origin;
            float width = copy.frame.size.width;
            float height = copy.frame.size.height;

            CGPoint startPoint = CGPointMake(startPos.x + (width/2), startPos.y);
            CGPoint endPoint = CGPointMake(startPos.x + (width/2), startPos.y + height);

            NSLog(@"%.1f:%.1f, %.1f:%.1f", startPoint.x, startPoint.y, endPoint.x, endPoint.y);

            [self drawDashedLineFrom:startPoint toEnd:endPoint inView:_thicknessUI];

            break;

        }
    }
}

好吧,我已经挖得够深了,找到了我的问题的原因

原因是因为未设置CAShapeLayer的帧和原点,因此无法强制转换§GET以检索其值。但是,在实例化属性时,可以设置相对于所使用路径的位置和边界

[path moveToPoint:CGPointMake(self.view.frame.size.width/2 - _plateLengthPX, tenPercent)]; // datum side start
[path addLineToPoint:CGPointMake(self.view.frame.size.width/2 - capStartWidthPX - rootGapPX, tenPercent)]; // weld(cap) start
[path addLineToPoint:CGPointMake(self.view.frame.size.width/2 - rootGapPX, tenPercent + _plateHeightPX - rootPrepHeightPX)]; // weld(root prep) start
[path addLineToPoint:CGPointMake(self.view.frame.size.width/2 - rootGapPX, tenPercent + _plateHeightPX)]; // weld(root prep) end
[path addLineToPoint:CGPointMake(self.view.frame.size.width/2 - _plateLengthPX, tenPercent + _plateHeightPX)]; // datum side end
[path addLineToPoint:CGPointMake(self.view.frame.size.width/2 - _plateLengthPX, tenPercent + _plateHeightPX/2 + 10)]; // datum side end
[path addLineToPoint:CGPointMake(self.view.frame.size.width/2 - _plateLengthPX + 15, tenPercent + _plateHeightPX/2 + 5)]; // datum side end
[path addLineToPoint:CGPointMake(self.view.frame.size.width/2 - _plateLengthPX - 15, tenPercent + _plateHeightPX/2 - 5)]; // datum side end
[path addLineToPoint:CGPointMake(self.view.frame.size.width/2 - _plateLengthPX, tenPercent + _plateHeightPX/2 - 10)]; // datum side end

_datumLayer = [CAShapeLayer layer];
_datumLayer.name = @"datumSideLayer";
_datumLayer.path = [path CGPath];
_datumLayer.strokeColor = [_lineColor CGColor];
_datumLayer.lineWidth = 2.0;
_datumLayer.fillColor = [_shaderColor CGColor];

[self.view.layer addSublayer:_datumLayer];
CGRect pathRect = CGPathGetPathBoundingBox([path CGPath]);
_datumLayer.bounds = pathRect;
_datumLayer.position = CGPointMake(CGRectGetMidX(pathRect), CGRectGetMidY(pathRect));