2014-11-08 10 views
3

저는 UIBezierPath에서 그려진 CAShapeLayer를 가지고 있습니다. 그러나 어떤 이유에서 베 지어에 적용된 번역과 스케일은 그릴 때 CAShapeLayer로 이어지지 않았습니다. 동일한 변환을 적용 할 수있는 방법이 있습니까? 다음은 내 베 지어에 대한 코드입니다CAShapeLayer의 크기를 조정하고 번역하려면 어떻게해야합니까?

//// General Declarations 
CGContextRef context = UIGraphicsGetCurrentContext(); 
UIColor *color = [UIColor colorWithRed: 1 green: 1 blue: 1 alpha: 1]; 

///Where the Transformations are 
CGContextTranslateCTM(context, 52.7, 45.46); 
CGContextScaleCTM(context, 0.5, 0.5); 

UIBezierPath *trackPath = UIBezierPath.bezierPath; 
[trackPath moveToPoint: CGPointMake(-28.3, 160.72)]; 
[trackPath addCurveToPoint: CGPointMake(125.37, -41.18) controlPoint1: CGPointMake(-28.3, 160.72) controlPoint2: CGPointMake(-11.62, -41.18)]; 
[trackPath addCurveToPoint: CGPointMake(279.04, 160.72) controlPoint1: CGPointMake(262.36, -41.18) controlPoint2: CGPointMake(279.04, 160.72)]; 
[trackPath moveToPoint: CGPointMake(279.04, 160.82)]; 
[trackPath addCurveToPoint: CGPointMake(432.7, 362.72) controlPoint1: CGPointMake(279.04, 160.82) controlPoint2: CGPointMake(295.72, 362.72)]; 
[trackPath moveToPoint: CGPointMake(-28.76, 160.82)]; 
[trackPath addCurveToPoint: CGPointMake(-182.43, 362.72) controlPoint1: CGPointMake(-28.76, 160.82) controlPoint2: CGPointMake(-45.45, 362.72)]; 

CGContextSaveGState(context); 
[color setStroke]; 
trackPath.lineWidth = 1; 
[trackPath stroke]; 
CGContextDrawPath(context, kCGPathFill); 
CGContextRestoreGState(context); 

그리고 이것은, 당신이 그것을 할 방법이 CAShapeLayer 자체에 변환을 적용 할 필요가 없는 나의 CAShapeLayer

raceTrack = [CAShapeLayer layer]; 
    raceTrack.path = trackPath.CGPath; 
    raceTrack.strokeColor = [UIColor whiteColor].CGColor; 
    raceTrack.fillColor = [UIColor clearColor].CGColor; 
    raceTrack.lineWidth = 1; 
    [self.layer addSublayer:raceTrack]; 

답변

4

입니다.

CATransform3D translate = CATransform3DMakeTranslation(52.7, 45.46, 0); 
CATransform3D scale = CATransform3DMakeScale(0.5, 0.5, 1); 
CATransform3D transform = CATransform3DConcat(translate, scale); 

CAShapeLayer *raceTrack = [CAShapeLayer layer]; 
raceTrack.transform = transform;