2011-02-19 12 views
19

Estoy utilizando el siguiente código para rotar una imagen, pero la mitad de la imagen (en el eje y) que se ha girado "fuera de" la página, desaparece. ¿Como arreglar? heading está en radianes.rotar CATransform3D hace que la mitad de la imagen desaparezca

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; 
+0

hecho esto parece que meterse con el índice z. Este UIImageView es parte de una UIView que está parcialmente "detrás" de otra UIView, pero después de la rotación, myUIImageView siempre se dibuja en la parte superior. – iPadDeveloper2011

Respuesta

32

La solución a esto fue para establecer la propiedad zPosition de todas mis capas apropiadamente. Gracias a @Brad Larson, quien sugirió esta solución en un comentario here. Parece que, cuando comienza a usar CATransform3D, la jerarquía normal de vistas de zindex establecida por addsubview se descarta.

5
layer.anchorPoint = CGPointMake(0.0, 0.0); 
0

Ajuste de los anchorPoint a {0.0, 0.0} funciona tan bien (como ya se ha señalado Liam).

He aquí el fragmento de código completo para cambiar el anchorPoint sin cambiar la posición de la capa en la pantalla:

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