2012-05-08 2 views
1

이 것은 까다 롭습니다!수퍼 뷰를 회전 한 후 CGAffineTransform 행렬을 계산하십시오.

보기 A의 하위보기 인보기 A와보기 B가 있습니다. 두보기의 프레임은 일정합니다. 시각적 위치와 회전 이동 안 동일한 즉 B가 유지되도록

viewA.transform = CGAffineTransformMakeRotation(angle); 

은 이제 뷰 B의 변환 매트릭스를 조정할 :

는 I는 변환 행렬을 변경하여도 A를 회전/A의 회전 각도를 바꾸면서 회전 함.

분명히 반대 방향으로보기 B를 회전해야하지만 충분하지 않습니다.

나는이 시도하지만 B는 여전히 주변에 흔들 리게 :

viewB.transform = CGAffineTransformTranslate(CGAffineTransformMakeRotation(-angle), viewA.bounds.size.width, viewA.bounds.size.height); 

어쩌면 올바른 매트릭스도 ... viewB의 프레임에 따라 어쩌면 내가 사인 및 코사인을 사용할 필요가 ...?

나는 B를 A 형제의 관점으로 간단하게 만들 수는 있지만, 나는 원하지 않는다.

답변

0

안녕하세요이 시도하고 나를 PLS 떠올랐다

viewB.transform=CGAffineTransformInvert(viewA.transform) 
+0

이'viewB.transform = CGAffineTransformMakeRotation (-angle)'때문에'CGAffineTransformInvert (CGAffineTransformMakeRotation (각도)) '와 동일하다 'CGAffineTransformMakeRotation (-angle)'는 완전히 똑같습니다. 앞서 언급했듯이 회전만으로는 충분하지 않습니다. – Felix

+0

나는 UR 대답을 이해하지 못한다. 무엇을 마침내 성취하고 싶니? –

0

두 가지를 알려 주시기 바랍니다.

먼저보기 A에서보기 B를 제거하고보기 A의 수퍼 뷰에 추가하면 안됩니까 (회전 순서 만 해당). 그것은 시각적으로 동일합니다.

다른 생각은 애니메이션을 동기화 상태로 유지하기 위해 CATransaction에서 애니메이션을 래핑하는 것입니다.

뷰 A에서 뷰 B를 유지하지 않고 두 개 이상의 애니메이션을 실행하지 않는 것이 좋습니다. 뷰 B를 뷰 A 내부에서 유지하는 이유는 범위를 기준으로 클리핑이 수행 되었기 때문입니까?

이 레이어이지만보기와 같은 작동 :

[CATransaction begin]; 
[CATransaction flush]; 
[CATransaction setAnimationDuration:2.0f]; 
[CATransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; 
CATransform3D transform = CATransform3DMakeRotation(M_PI/4, 0, 0, 1); 
outerLayer.transform = CATransform3DConcat(outerLayer.transform, transform); 
innerLayer.transform = CATransform3DInvert(outerLayer.transform); 
[CATransaction commit]; 
+0

이것은 애니메이션과는 아무런 관련이 없습니다! 나는 transform-property를 애니메이트한다고 말하지 않는다. 나는 B를 A의 외부에 유지할 수 있다는 것을 알고 있지만 그것은 나의 질문에 답하지 않습니다. – Felix

+0

보기에 즉시 변형을 적용하고 있습니까? 그게 사용자를 혼란스럽게하지 않습니까? 뷰가 유체 모션을 사용하여 한 위치에서 다른 위치로 전환하면 실제로 애니메이션이됩니다. 두 가지 제안 모두 당신의 견해가 변형으로 엉망이되는 것을 막을 수 있습니다. – RileyE

+0

다른 애니메이션 스타일을 사용하고 싶지 않은 경우 왜보기 B를 형제보기로 만들고 싶지 않습니까? 그것은 아무 의미가 없습니다. – RileyE

관련 문제