2017-03-19 10 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));