2012-06-07 3 views
3

후 난 당신이 여기에서 볼 수있는 것과 같은 접이식 페이스 북 메뉴를 만들기 위해 노력하고있어. 나는 2 층이 있습니다 - 왼쪽 층에서 앵커 포인트가 {1, 0.5} - 권리 층에서 앵커 포인트가 {0, 0.5}CATransform3DRotate CATransform3DTranslate

나는 그들이 내 주요의 중간에 접을 수 있습니다 그런 문제없이보기 : CGFloat width = self.view.frame.size.width; CGFloat destinationWidth = slider.value * width;

CGFloat hypothenuse = self.view.frame.size.width/2.0f; 
CGFloat adjacent = destinationWidth/2.0f; 
CGFloat opposite = sqrtf(powf(hypothenuse, 2)-powf(adjacent, 2)); 

CGFloat marginLeft = (width - destinationWidth)/2; 

CGFloat angle = asinf(opposite/hypothenuse); 

CATransform3D transform = CATransform3DIdentity; 
transform.m34 = 1.0f/-4000.0f; 

rightSide.layer.transform = CATransform3DRotate(CATransform3DTranslate(transform,0,0,-opposite),-angle, 0, 1, 0); 
leftSide.layer.transform = CATransform3DRotate(CATransform3DTranslate(transform,0,0,-opposite),angle, 0, 1, 0); 

이것은 완벽하게 작동합니다. CATransform3DTranslate (변환, -marginLeft, 0,도 반대)

레이어는 여전히 좋은 Z 번역에 접어 있지만 어색한 각도로 끝납니다 :이 같은 x 축에 내 레이어를 번역 할 때 문제가 온다 전체 뷰가 회전 된 경우

이것은 분명히

미리 감사드립니다 ... (내가 M34, 그것은 "작품"으로 설정하지 않는 경우)하지만 난 그것을 보상하는 방법을 알아낼 수 없습니다 관점에 연결되어 있습니다!

건배,

TeuBeu2 당신은 순서대로 4 변환을 작성할

+0

을 테스트하지 않은하지만 난 그것을 변경할 수 없습니다. 기본보기 앵커 포인트를 수정하려고 시도했지만 작동하지 않는 것 같습니다 ... – TeuBeu2

+0

z 변환에 대해 -opposite를 사용하면 어떻게됩니까? – Nico

답변

0

:

  1. 회전
  2. 번역 Z는
  3. 번역 X
  4. 프로젝트

문제는 이전이 아닌 투영 이후에 X를 번역하려고하는 것입니다. 그것이 그렇듯이, 당신은 투영과 함께 센터를 향해 다시 접어 당기는거야. 이 시도 :

CATransform3D transform = CATransform3DIdentity; 
transform.m34 = 1.0f/-4000.0f; 

transform = CATransform3DConcat(transform, CATransform3DMakeTranslation(-marginLeft,0,0)); 

rightSide.layer.transform = ... 

면책 조항 : 나는 실제로 나는 그것이 소실점과 관련이있다 이해할이