2016-05-31 2 views
0

CAShapeLayer의 경계를 설정해야합니까?CAShapeLayer - 경계

모양 레이어를 만들고이를 UIBezierPath 경로를 지정하면 모양이보기 크기의 단순한 원입니다.

레이어에 position 또는 bounds을 설정하지 않았습니다. 틀린가요?

class View: UIView { 
... 

var backgroundLayer: CAShapeLayer! 

func setup() { 
    // call from init 
    backgroundLayer = CAShapeLayer() 
    backgroundLayer.strokeColor = UIColor.redColor() 
    backgroundLayer.lineWidth = 3 
    backgroundLayer.fillColor = UIColor.clearColor().CGColor 
    layer.addSublayer(backgroundLayer) 
    ... 
} 

override func layoutSubviews() { 
    super.layoutSubviews() 
    backgroundLayer?.path = circlePath(100) 
    ... 
} 

func circlePath(progress: Int) -> CGPath { 
    let path = UIBezierPath() 
    let inverseProgress = 1 - CGFloat(progress)/100 
    let endAngleOffset = CGFloat(2 * M_PI) * inverseProgress 
    path.addArcWithCenter(localCenter, radius: radius, startAngle: CGFloat(-M_PI), endAngle: CGFloat(M_PI) - endAngleOffset, clockwise: true) 
    return path.CGPath 
} 

... 
} 

답변

1

이미 보았 듯이 경계를 설정하지 않아도 계층이 잘 표시됩니다. 따라서 레이아웃을 설정하거나 변환 할 때 경계를 설정하지 않아도 (또는 경계의 경계 상자와 다른 경계를 가짐) 혼동을 줄 수 있습니다.

레이아웃, 위치 지정 및 변형과 관련하여 고려해야 할 몇 가지 좌표가 있습니다. 그것은 부모의 경로 도형 층 좌표계

  • 을 경로의 각 점의 원점 (0,0)을 기준으로 상대적으로 위치되는 시스템을
  • 좌표의 것

    1. 층은 상대적 위치 통로.

    모양 레이어는 중심을 기준으로 변형되고 모양 레이어의 위치도 경계의 중심에 있습니다. 즉, 모양 레이어에 경계 (0 × 0) 크기가없는 경우 경로의 중심과 달리 경로 (0,0)의 원점을 중심으로 모든 변형 (예 : 회전)이 발생합니다. 또한 모양 레이어의 위치를 ​​설정할 때 경로의 중심과는 달리 경로의 원점을 개념적으로 배치한다는 의미입니다. 그러나 패스의 원점이 패스 경계 상자의 중심 (예 : (0,0)을 중심으로하는 원) 인 경우 실제로는 문제가되지 않습니다.

    그래서 요령을 정할 필요는 없지만 경로에 따라 위치 지정 또는 변형이 설정되었을 때 명확해질 수 있습니다.

  • +0

    맑음. –