CATransform3D rotate приводит к исчезновению половины изображения - PullRequest
20 голосов
/ 19 февраля 2011

Я использую следующий код для поворота изображения, но половина изображения (по оси Y), которое было повернуто «вне» страницы, исчезает. Как исправить? heading в радианах.

    CALayer *layer = myUIImageView.layer;
    CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity;
    rotationAndPerspectiveTransform.m34 = 1.0 / 500;
    rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, heading, 0.0f, 1.0f, 0.0f);
    layer.transform = rotationAndPerspectiveTransform;

Ответы [ 3 ]

33 голосов
/ 21 февраля 2011

Решением этой проблемы было установить свойство zPosition всех моих слоев соответствующим образом.Благодарю @Brad Larson, который предложил это решение в комментарии здесь .Кажется, что когда вы начинаете использовать CATransform3D, обычная иерархия представлений zindex, установленная addubview, выбрасывается в окно.

5 голосов
/ 21 мая 2011
  layer.anchorPoint = CGPointMake(0.0, 0.0);
0 голосов
/ 24 июля 2012

Настройка anchorPoint на {0.0, 0.0} также работает (как уже указывал Лиам).

Вот полный фрагмент кода для изменения anchorPoint без изменения положения слоя на экране:

     layer.anchorPoint = CGPointMake( 0.0, 0.0 );

     CGPoint position = layer.position;
     CGSize size = layer.bounds.size;

     CGFloat posX = position.x - size.width / 2.0;
     CGFloat posY = position.y - size.height / 2.0;

     layer.position = CGPointMake( posX, posY );
...