CATransform3D rotate приводит к исчезновению половины изображения

Я использую следующий код для поворота изображения, но половина изображения (вниз по оси 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;

person iPadDeveloper2011    schedule 19.02.2011    source источник
comment
На самом деле, похоже, это портит z-index. Этот UIImageView является частью UIView, который частично находится за другим UIView, но после поворота myUIImageView всегда отображается сверху.   -  person iPadDeveloper2011    schedule 19.02.2011


Ответы (2)


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

person iPadDeveloper2011    schedule 21.02.2011

Установка 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 );
person Michael Thiel    schedule 24.07.2012