2012-12-25 3 views
3

CGMutablePath이 들어있는 CAShapeLayer이 있는데 그 주위에 획이 그려져 있습니다. 내 애플 리케이션에서, 나는이 CAShapeLayer 특정 시간에 크기를 증가/감소 변환합니다. 나는 CAShapeLayer을 변형 할 때 알아 차리고, stroke도 변형됩니다. 이상적으로 CAShapeLayers이 변형 된 경우에도 strokelineWidth을 항상 3으로 유지하고 싶습니다.스트로크 된 CAShapeLayer 변환

나는 그때 이후를 재 부가 ​​변형하기 전에 스트로크를 차단 시도했지만 작동하지 않았다 :

subLayerShapeLayer.lineWidth = 0; 
subLayerShapeLayer.strokeColor = nil; 
self.layer.sublayerTransform = CATransform3DScale(self.layer.sublayerTransform, graphicSize.width/self.graphic.size.width, graphicSize.height/self.graphic.size.height, 1); 
shapeLayer.strokeColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1].CGColor;; 
shapeLayer.lineWidth = 3; 

사람이 내가이 작업을 수행 할 수있을 것 알고 있나요? 마치 변형 된 후에 획을 다시 그릴 수 있어야하는 것처럼 보입니다.

답변

3

그려진 표현 (CAShapeLayer)이 아닌 CGPath 자체를 변형합니다.

CGPathCreateMutableCopyByTransformingPath - CGPath Reference

CGPathCreateMutableCopyByTransformingPath 

변환 행렬에 의해 변환 된 그래픽 경로 변경 가능한 복사본을 생성 자세히 살펴 보게한다.

CGMutablePathRef CGPathCreateMutableCopyByTransformingPath(
    CGPathRef path, 
    const CGAffineTransform *transform 
); 

매개 변수

path 복사 할 경로입니다.

transform 아핀 변환 행렬을 가리키는 포인터. 변환이 필요없는 경우 NULL입니다. Quartz를 지정하면 새로운 경로의 모든 요소에 변형이 적용됩니다. 반환 값 transform 매개 변수로 변환 된 지정된 경로의 새로운 변경 가능 복사본입니다. 이 오브젝트를 릴리스해야합니다.

가용성 iOS 5.0 이상에서 사용할 수 있습니다. 에 선언 됨 CGPath.h

+0

응답 해 주셔서 감사합니다. CAShapeLayer가 변형 될 때마다 경로를 바꾸는 경우 CAShapeLayer를 사용하면 얻을 수있는 이점 중 일부를 제거하지 않습니까? drawRect의 컨텍스트에 그리는 것과 똑같지 않습니까? –

+0

죄송합니다. 현재는 더 좋은 해결책이 없습니다. 다른 어떤 방법으로도 그 효과를 얻을 수는 없을 것입니다. – Till