2016-06-09 1 views
0

참고 : 색, 그라디언트 및 크기를 무시하십시오! 내 관심은,CATransform3D 퍼스펙티브가 CATransformLayer에서 작동하지 않습니다.

내가 울부 짖는 소리로 출력을 달성하기 위해 노력하고 예상대로 관점이 작동되지

enter image description here

하지만 난 내 코드를 실행할 때 그것은 나에게 다음과 같은 출력을주고있다

enter image description here

내 코드를 확인하십시오.

CATransformLayer *baseLayer = [CATransformLayer layer]; 
baseLayer.anchorPoint = CGPointZero; 
baseLayer.bounds = self.view.bounds; 
baseLayer.position = CGPointMake(CGRectGetMidX(self.view.bounds), CGRectGetMidY(self.view.bounds)); 

[self.view.layer addSublayer:baseLayer]; 

CALayer *redLayer = [CALayer layer]; 
redLayer.backgroundColor = [UIColor redColor].CGColor; 
redLayer.frame = CGRectMake(0, 0, 100, 100); 
redLayer.position = CGPointMake(0,0); 
redLayer.anchorPoint = CGPointMake(1, 0.5); // right 
[baseLayer addSublayer:redLayer]; 

CALayer *blueLayer = [CALayer layer]; 
blueLayer.backgroundColor = [UIColor blueColor].CGColor; 
blueLayer.bounds = CGRectMake(0, 0, 600, 100); 
blueLayer.anchorPoint = CGPointMake(1, 0.5); // right 
blueLayer.position = CGPointMake(-50,0); 
[baseLayer addSublayer:blueLayer]; 

CATransform3D transform = CATransform3DIdentity; 
transform.m34 = -1/80; 
transform = CATransform3DRotate(transform, -M_PI_2, 0, 1, 0); 
blueLayer.transform = transform; 

baseLayer.sublayerTransform = CATransform3DRotate(CATransform3DIdentity, degreesToRadians(80), 0, 1, 0); 

답변

0

이 문제가 해결되지 않았지만 예상대로 작동하는 업데이트 된 코드가 있습니다.

CATransformLayer *baseLayer = [CATransformLayer layer]; 
baseLayer.anchorPoint = CGPointZero; 
baseLayer.bounds = self.view.bounds; 
baseLayer.position = CGPointMake(CGRectGetMidX(self.view.bounds), CGRectGetMidY(self.view.bounds)); 

CALayer *redLayer = [CALayer layer]; 
redLayer.backgroundColor = [UIColor redColor].CGColor; 
redLayer.frame = CGRectMake(0, 0, 1000, 250); 
redLayer.position = CGPointMake(0,0); 
redLayer.anchorPoint = CGPointMake(0, 0.5); // right 
redLayer.transform = CATransform3DRotate(CATransform3DIdentity, M_PI_2,0.0f, 1.0f, 0.0f); 
[baseLayer addSublayer:redLayer]; 

CALayer *blueLayer = [CALayer layer]; 
blueLayer.backgroundColor = [UIColor blueColor].CGColor; 
blueLayer.bounds = CGRectMake(0, 0, 125, 250); 
blueLayer.anchorPoint = CGPointMake(0, 0.5); // right 
blueLayer.position = CGPointMake(0,0); 
[baseLayer addSublayer:blueLayer]; 

CGFloat perspective = -1000.0; //This relates to the m34 perspective matrix. 

CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity; 
rotationAndPerspectiveTransform.m34 = 1.0/perspective; 
rotationAndPerspectiveTransform = CATransform3DRotate(newTransform, degreesToRadians(10) , 0.0f, 1.0f, 0.0f); 


baseLayer.sublayerTransform = rotationAndPerspectiveTransform; 
+1

C에서 정수 나누기로 표현식 '1/80'이 수행되고 '0'이 생성되는 것이 문제입니다. 'perspective/perspective'로 변경했을 때,'perspective'는'CGFloat' 타입을 가지며, 소수점이 아닌 0 결과를 생성하는 부동 소수점 나누기를 사용하게 만들었습니다. –

관련 문제