0
Примечание: Пожалуйста, игнорируйте цвета, градиенты и размер! Моя забота перспектива не работает, как ожидалосьПерспектива CATransform3D не работает на CATransformLayer
Я пытаюсь добиться вывода, как показано ниже,
Но когда я запускаю мой код это дает мне следующий вывод
Посмотрите на мой код:
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);
Проблема заключалась в том, что в C выражение '1/80' выполняется как целочисленное деление и создает' 0'. Когда вы изменили его на «1/перспектива», где «перспектива» имеет тип «CGFloat», вы сделали его с помощью деления с плавающей запятой, которое производит дробный, ненулевой результат. –