2009-05-08 14 views

Respuesta

18

Una forma de hacerlo es cambiando el punto de anclaje de la capa subyacente de UIImageView y girando sobre eso. Puede cambiar el punto de giro con algo como lo siguiente:

imageView.layer.anchorPoint = CGPointMake(0.25, 0.25); 

Anchorpoint se define en términos de coordenadas relativas dentro de la capa. Es decir, (0,0) es la esquina superior izquierda de la capa (en el iPhone, donde las capas UIView han cambiado coordenadas Y) y (1,1) es la esquina inferior derecha.

Mover el ancla puede hacer que su imagen se mueva, por lo que es posible que tenga que ajustar su posición posteriormente.

Para girar la capa de la imagen de ese nuevo punto de anclaje, se puede cambiar la estructura CATransform3D para la capa de usar algo como lo siguiente:

CATransform3D rotatedTransform = imageView.layer.transform; 
rotatedTransform = CATransform3DRotate(rotatedTransform, 60.0 * M_PI/180.0, 0.0f, 0.0f, 1.0f); 
imageView.layer.transform = rotatedTransform; 

En este ejemplo se hace una rotación incremental de los 60 grados alrededor del punto de anclaje .

Todos los cambios en una capa están animados de forma predeterminada. Puede desactivar esta animación encerrando los cambios en estas propiedades en un CATransaction como la siguiente:

[CATransaction begin]; 
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];  

// Code for changes here 

[CATransaction commit]; 
+2

Simplemente añadiendo algunas notas aquí para mis seres futuros: 'import import 'y también necesita importar el marco' QuartzCore'. Gracias. –

+0

pero esto mueve la imagen como dices. ¿Es posible simplemente mover el punto de anclaje? – hfossli

+0

@Fossli - No, la posición de una capa está vinculada a su punto de anclaje. Sin embargo, es relativamente fácil averiguar cuál debe ser la nueva posición de la capa, y cambiar tanto el punto de anclaje como la posición de la capa en una transacción no animada. –

Cuestiones relacionadas