Swift iOS: применение дополнительных изменений для преобразования при использовании свойства CATransform3D .m34 для изменения перспективы в Swift.

Я читаю книгу по анимации iOS Core Animation: Advanced Techniques . Книга написана на языке Objective C. Я не владею языком Objective C. Я понимаю, что делает свойство .m34, но когда я применяю код книги к Swift, перспектива не меняется. Проблема в том, что я не могу добавить к существующему преобразованию, как объяснено здесь.

Мой код:

var tranform = CATransform3DIdentiy
transfrom.m34 = -1 / 500
transform = CATransform3DMakerotation(CGFloat(Double.pi/4), 0, 1, 0) // this is just creating a new transform instead of adding to the existing one
viewIwantTransformed.layer.transfrom = transform

Код книги:

@implementation ViewController 
- (void) viewDidLoad 

 { [super viewDidLoad]; 

   // create a new transform CATransform3D 
   transform = CATransform3DIdentity;

   // apply perspective 
   transform.m34 = - 1.0 / 500.0; 

  // rotate by 45 degrees along the Y axis
  transform = CATransform3DRotate( transform, M_PI_4, 0, 1, 0);

  // apply to layer 
  self.viewIwantTransformed.layer.transform = transform; 

} @end

Результат

введите здесь описание изображения


person Lance Samaria    schedule 31.05.2018    source источник
comment
попробуйте эту строку transform = CATransform3DRotate (transform, M_PI_4, 0, 1, 0)   -  person Jigar    schedule 31.05.2018
comment
@ Jigar Darji привет, спасибо, сработало! Если вы сделаете это официальным ответом, я приму его.   -  person Lance Samaria    schedule 31.05.2018
comment
принять мой ответ   -  person Jigar    schedule 31.05.2018
comment
там написано ждать 4 минуты   -  person Lance Samaria    schedule 31.05.2018
comment
ок, попробуй после   -  person Jigar    schedule 31.05.2018


Ответы (1)


попробуй это

transform = CATransform3DRotate(transform, M_PI_4, 0, 1, 0) 

вместо этого

transform = CATransform3DMakerotation(CGFloat(Double.pi/4, 0, 1, 0)
person Jigar    schedule 31.05.2018
comment
Swift 4 предлагает использовать Double.pi вместо M_PI. Ответ правильный в любом случае, спасибо. Вот что предлагалось в предупреждении: измените M_PI_4 на Double.pi/4. Таким образом, код будет преобразован = CATransform3DRotate(transform, CGFloat(Double.pi/4), 0, 1, 0) - person Lance Samaria; 31.05.2018
comment
хм, есть некоторое предупреждение о синтаксисе - person Jigar; 31.05.2018