2017-03-19 5 views
0
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; 

     } 
    } 
} 

NSLog出力は0.0:0.0, 0.0:0.0です。ネストされたCAShapeLayer§起点を取得しますか?

ネストされているシェイプレイヤは、プロパティとして強くインスタンス化されます。しかし、フレームから原点、幅、高さを取得することはできません。

EDIT:さらに掘り下げた後、私は自分のCAShapeLayerのフレームセットを持っていません。パスで描かれています。

しかし、私はこれをどのようにして元のようにすることができますか?

[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]; 

答えて

0

わかりました。問題の原因を見つけるために十分深く掘り下げました。

理由は、CAShapeLayerのフレームと原点が設定されていないためです。そのため、__GETをキャストして値を取得できないためです。しかし、プロパティをインスタンス化している間は、あなたが使用しているパスに対して位置&の境界を設定することができます。

CGRect pathRect = CGPathGetPathBoundingBox([path CGPath]); 
_datumLayer.bounds = pathRect; 
_datumLayer.position = CGPointMake(CGRectGetMidX(pathRect), CGRectGetMidY(pathRect)); 
関連する問題