2012-03-05 4 views
2

이미지를 사용하여 기본 속도계를 구현하고 회전합니다. 그러나 초기 회전 (240도에서 라디안으로 변환)을 설정하면 이미지가 회전되고 그렇지 않은 경우보다 훨씬 작아집니다. 일부 값은 이미지를 완전히 사라지게 만듭니다. (M_PI_4와 같은)CGAffineTransformMakeRotation 이미지 크기 조정

슬라이더는 테스트를 위해 0-360에서 시작합니다.

다음 코드는 viewDidLoad에서 호출되며 슬라이더 값이 변경 될 때 호출됩니다.

-(void) updatePointer 
{ 
    double progress = testSlider.value; 
    progress += pointerStart 
    CGAffineTransform rotate = CGAffineTransformMakeRotation((progress*M_PI)/180); 
    [pointerImageView setTransform:rotate]; 
} 

편집 : 일단 처음 설정되면 스케일이 동일하게 유지된다는 점에 유의해야합니다. 그래서 pointerStart를 240으로 설정하면 축소되지만 슬라이더를 움직이면 눈금이 변경되지 않습니다 (그리고 예상대로 회전시킬 것입니다). 변환에서 "진행률"을 240으로 바꾸는 것은 똑같은 일을합니다 . (축소합니다.)

답변

2

나는이 질문에 걸려 넘어지면 누구든지 문제를 해결할 수있었습니다. 분명히 viewDidLoad가 호출 될 때 이미지가 완전히로드되거나 측정되지 않으므로 매트릭스는 cgAffineTransform이 실제로 이미지의 크기를 변경한다는 것을 변형합니다. viewDidAppear에 대한 업데이트 코드를 이동하면 문제가 해결되었습니다.

+1

고마워, 너는 내 하루를 만들어. –

0

회전하려는 뷰의 변환 상태를 가져 와서 회전 변환을 적용합니다.

CGAffineTransform trans = pointerImageView.transform; 

pointerImageView.transform = CGAffineTransformRotate(trans, 240); 
+0

위에서 사용 된 방법과 동일한 기능을 수행합니다. 실제로 구현은 이전에 수행 한 작업이며, 문제인지 확인하기 위해 전환했습니다. – Nyth