2014-01-27 10 views
0

CGAffineTransform을 사용하여 점 배열을 변환하려고합니다. 크기 조정은 완벽하게 작동하지만 포인트는 왼쪽 하단을 (0,0)으로 사용합니다. 같은 ...CGAffineTransform 스케일을 사용하고 동시에 뒤집을 수있는 방법

Upside down graph

는 일반적으로 단순히 CGAffineTransformMakeScale(1,-1);을 사용하지만 난 이미 규모를 수행하고 있습니다 때문에 나는 변환 기존에 추가 할 수 없습니다.

여기에 내 현재 코드

내가 fromRect.originCGPointZero입니다 있으리라 믿고있어
- (CGAffineTransform)transformFromValueToScreen 
{ 
    CGRect fromRect = self.valueSpace; 
    CGRect viewRect = self.screenSpace; 

    CGSize scales = CGSizeMake(viewRect.size.width/fromRect.size.width, 
           viewRect.size.height/fromRect.size.height); 

    CGAffineTransform transform = CGAffineTransformMakeScale(scales.width, 
                  scales.height); 

    return transform; 
} 

답변

4

입니다.

원점을 왼쪽 하단으로 이동하고 Y 축을 뒤집어 원하는 배율을 적용하는 복합 변환이 필요합니다.

당신은 화합물이처럼 변환 수정 기능을 사용하여 변환 할 수 있습니다

: 당신이 코드의 변경이 다른 사람의 답변을 향상시킬 것이라고 생각한다면

- (CGAffineTransform)transformFromValueToScreen { 
    CGRect fromRect = self.valueSpace; 
    CGRect viewRect = self.screenSpace; 

    CGSize scales = CGSizeMake(viewRect.size.width/fromRect.size.width, 
           viewRect.size.height/fromRect.size.height); 

    CGAffineTransform transform = CGAffineTransformIdentity; 

    // Move origin from upper left to lower left. 
    transform = CGAffineTransformTranslate(transform, 0, fromRect.size.height); 

    // Flip the sign of the Y axis. 
    transform = CGAffineTransformScale(transform, 1, -1); 

    // Apply value-to-screen scaling. 
    transform = CGAffineTransformScale(transform, scales.width, scales.height); 

    return transform; 
} 
+0

@soboxstudio, 제안보다는 코멘트를 게시하시기 바랍니다 편집. –

+0

정말 고마워. 난 변형의 섬세한 순서와 아직도 쉽게 혼돈 스럽다. 또한 약간의 변경을 제안 할 수 있습니다 :'fromRect.bounds.height'는'viewRect.size.heigh'이어야합니다. –

+0

예 'CGRects'는 모두'CGPointZero'의 원점을가집니다. –