2010-04-17 3 views
2

나는이보기를하고 난 내 코드의 다른 지점에서뷰의 동시 회전 및 크기 조절을 어떻게 애니메이트합니까?

myView.transform = CGAffineTransformMakeRotation(degreesToRadian(90)); 
//The view was originally at 0 degrees. 

같은 것을 사용하여 일부 회전 변환을, 나는 그것을 애니메이션보기를 확장하고 싶은, 그래서 나는

[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:1.0]; 
myViews.transform = CGAffineTransformMakeScale(2.0f, 2.0f); 
[UIView commitAnimations]; 

하지만 그렇게하면 뷰가 0 도인 상태에서 애니메이션이 수행되므로 이전 변형은 무시됩니다. 뷰가 아직 0 도인 것으로 가정하므로이 애니메이션은 뷰의 크기를 조정하고 다시 0도까지 회전합니다 (!!!! ?????)

이 버그가 있거나 뭔가 빠졌습니까? ? 덕분에 .

답변

3

을 KennyTM와 논의 후, 나는 모두 절대 변환을 가지고 최선의 솔루션에 도착 ... 줌 방법에

을, 내가 할 :

// notice that both transformations are absolute 
CGAffineTransform rotation = CGAffineTransformMakeRotation(degreesToRadian(viewAngle)); 
CGAffineTransform zoom = CGAffineTransformMakeScale(zoomFactor, zoomFactor); 
myView.transform = CGAffineTransformConcat(rotation, zoom); 

보기를 회전 할 때 viewAngle을 저장합니다.

2

왜냐하면 .transform 할당은 새 것을 의미하지 않으므로 이전 것을 연결한다는 의미입니다. 새 변형에서는 200 % 배율 만 지정하고 회전은 지정하지 않으므로보기는 0 °으로 되돌아갑니다.

대신을 시도해보십시오

myViews.transform = CGAffineTransformScale(myViews.transform, 2.0f, 2.0f); 
+0

감사합니다. 그러나 회전 문제는 해결되지만 크기 문제가 발생합니다. 문제는 이것입니다 : 저는이 뷰를 위해 사용하는 4 가지의 줌 요소가 있습니다. 0.66, 1.0, 1.5 및 2.0과 같습니다. 이들은 절대 값입니다. 솔루션을 사용하면 각 확대/축소 비율로 돌아갈 수 없습니다 .... – SpaceDog

+0

@Mike : 왜 줌 배율을 저장하기 위해 독립적 인 ivar을 사용할 수 없습니까? – kennytm

+0

무슨 뜻입니까? 확대/축소 비율이 1이라고 가정하고 솔루션을 사용하고 0.66으로 이동하십시오. 이제 2로 가고 싶습니다. 절대 스케일을 사용하면 zoomFactor를 2로 설정하지만 줌 요소는 3.03이어야합니다. 이제 0.66으로 돌아가려면 0.21로 만들어야합니다. 수많은 변화가 일어난 후에 나는 현재 줌 요소가 무엇인지 알지 못할 것입니다. 나는 적용된 모든 변환의 이력을 유지해야만 ivar를 보는 것만으로 현재 확대/축소 요소를 알 수 있습니다. 변형을 뷰에 적용하여 영구적으로 만들 수있는 방법이 없습니다. 변환 행렬을 업데이트하겠습니까? – SpaceDog

관련 문제