2012-10-16 3 views
3

Viewcontroller에있는 UIView의 원근법을 변경하고 싶습니다. 이 UIView 레이어를 변형해야한다고 생각하지만 어떻게해야할지 모르겠다.Perspective를 제공하기 위해 UIView를 회전하십시오.

나는 다음과 같은 코드를 해봤지만

UIView *myView = [[self subviews] objectAtIndex:0]; 
CALayer *layer = myView.layer; 
CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity; 
rotationAndPerspectiveTransform.m34 = 1.0/-500; 
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, 45.0f * M_PI/180.0f, 0.0f, 1.0f, 0.0f); 
layer.transform = rotationAndPerspectiveTransform; 

나는 또한 다음 코드를 시도했습니다 작동하지 않습니다 :

-(void)drawRect:(CGRect)rect { 
    CGContextRef ctx = UIGraphicsGetCurrentContext(); 
    CGAffineTransform transform = CGAffineTransformIdentity; 
    transform.b = -0.1; 
    transform.a = 0.9; 
    CGContextConcatCTM(ctx,transform); 
    // do drawing on the context 
} 

를이 너무 :

CALayer *layerA = [[self.view.layer sublayers] objectAtIndex:0]; 


    layerA.transform = CATransform3DConcat(layerA.transform, CATransform3DMakeRotation(DEGREES_TO_RADIANS(45),1.0,0.0,0.0) 

둘 중 누구도 일하지 않았습니다. UIView의 관점을 어떻게 바꿀 수 있습니까?

즉, 예를 들어 설명하겠습니다. 이미지 샘플 코드, 회전 파이 RotationPie sample. 나는 그것의 perpective를 x 또는 z asis로 변경하고 싶다.

답변

3

귀하의 첫 번째 솔루션은 제 마지막으로 작동합니다. 다음과 같이 나타납니다

enter image description here

당신은 전체 클래스 코드를 표시 할 수 있습니다, 그것은 당신의 끝에서 동일하게 작동하지 않을 경우?

(다운로드 여기에 업데이트 된 코드 예제 : http://www.speedyshare.com/dz469/download/Wheel-demo.zip)

을 그리고는 다음과 같습니다

편집

좋아, 내가 제공하는 코드 예제를 재구성 한, 그것은 가능한 방법을 보여 :

enter image description here

난 단지 신청하는 기본 서브 뷰로의 변환. 해당보기의 하위보기 인 모든보기도 변환됩니다. 해당 하위 뷰가 다른 변환을 원한다면 더 어려워 질 것입니다. 부모 뷰 변환을 고려하여 새 뷰를 계산해야하기 때문에 어려워 질 수 있습니다.

하지만 단순한 멀티 뷰 수준 변환을 수행했습니다. - 예를 들어, 효과를 달성하기 위해, 그 뷰 축척, 이동 및 회전 :

  • 난 parentView에 운동 변환을 적용한
  • I가 parentViews 제 하위 뷰에 회전 변환을 적용한;
  • parentViews 첫 번째 하위 뷰에 스케일 변환을 적용했습니다.

편집

좋아, 나는 그것이 변형 위치에 바퀴를 남겨하기 위해 가능한 방법을 보여 제공된 코드 예제를 재구성했습니다

(다운로드 여기에 업데이트 된 코드 예제 : http://www.speedyshare.com/5d8Xq/download/Wheel-demo2.zip

문제는 휠 자체에 변형을 추가하는 것이 었습니다. 휠 역시 변형을 기반으로합니다. 따라서 당신이 그것을 만졌을 때 - 기존의 변환을 대체하고 자신의 것을 적용했습니다 (사용자가 휠을 스 와이프 할 때 화살표를 돌리기 위해).

그래서 우리가 상호 작용하는 동안 그것을 원근감으로 두려면 다른 뷰 레이어가 필요합니다.

새 뷰 (상위 뷰를 호출 할 수 있음)를 만들고이 뷰에 휠을 하위 뷰로 추가했습니다.

그런 다음 휠 대신 부모 뷰로 변환을 적용합니다. 그리고 그것은 작동합니다!

나는 그것이 도움이 되었으면 좋겠다. 이제는 변형에 대해 더 많이 알게된다.

+0

제 경우에는 작동하지 않습니다. 컨테이너 뷰처럼 동일한 뷰에 여러 개의 작은 뷰가 함께 있습니다. 원근법 변경을 시도하면 작은 뷰가 서로 분리됩니다. 나는 또한 다른 축의 회전 또는 원근감을 원했습니다. – Aitul

+0

이 샘플 코드를 다운로드하십시오 https://github.com/wczekalski/CDPieMenu CDPieMenu에 대한 시각을 바꾸고 싶습니다. 어떻게 할 수 있습니까? – Aitul

+0

나는 당신의 대답을 좋아해, 나는 애니메이션을하는 법을 안다. 그러나 나는 항상 원근법으로 나타나기를 원한다. 같은 원근감으로 계속하기 위해 우물의 항목을 선택할 때. 예를 들어 45도 시점에서이 바퀴를 원합니다. 원근감이있는 x asis에서 바퀴를 회전하고 45 도의 시점을 계속 유지할 수 있습니다. – Aitul

관련 문제