2016-06-09 7 views
0

Hinweis: Bitte ignorieren Sie Farben, Farbverläufe und Größe! Meine Sorge ist, Perspektive nicht wie erwartet gearbeitet wirdCATransform3D Perspektive arbeitet nicht an CATransformLayer

Ich versuche Ausgang als Gebrüll zu erreichen,

enter image description here

Aber wenn ich meinen Code ausführen es gibt mir folgende Ausgabe

enter image description here

Schauen Sie sich bitte meinen Code an:

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); 

Antwort

0

Ich weiß nicht, was dieses Problem löst, aber hier ist mein aktualisierter Code, der wie erwartet funktioniert.

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

Das Problem war, dass in C der Ausdruck "1/80" als Ganzzahl-Division durchgeführt wird, und erzeugt "0". Wenn Sie es in '1/Perspektive 'geändert haben, wobei' Perspektive 'den Typ' CGFloat 'hat, wurde die Gleitkommadivision verwendet, die ein Bruchergebnis ungleich Null erzeugt. –