Objective-C: cómo girar una imagen en el espacio 3D

), un oggetto di più basso livello con innumerevoli potenzialità. La clase UIView expone un puntero a la capa ( CALayer ), sujeto a un nivel inferior con un potencial ilimitado. La capa proporciona una serie de métodos y propiedades relacionadas con la visualización de los contenidos de la vista. Por ejemplo, puede manipular el contenido de una vista en un espacio tridimensional. Nell ' ejemplo que puedo informar es interesante notar que el código es simple, y el conjunto se realiza mediante Interface Builder:

En la prueba que he puesto un cheque UIImageView dentro de un contenedor de vista. Esto es para demostrar que todos los objetos (visitas) se alteran si actuamos en el contenedor principal.

Nell ' fuente de ejemplo adjunto ilustran dos procedimientos diferentes para llevar a cabo la rotación en tres ejes. El primero hace uso de las transformaciones:

1
2
3
4
5
CATransform3D trans = CATransform3DIdentity;
trans, DegreesToRadians ( [ sliderX value ] ) , 1 , 0 , 0 ) ; trans = CATransform3DRotate (trans, DegreesToRadians ([valor sliderX]), 1, 0, 0);
trans, DegreesToRadians ( [ sliderY value ] ) , 0 , 1 , 0 ) ; trans = CATransform3DRotate (trans, DegreesToRadians ([valor sliderY]), 0, 1, 0);
trans, DegreesToRadians ( [ sliderZ value ] ) , 0 , 0 , 1 ) ; trans = CATransform3DRotate (trans, DegreesToRadians ([sliderZ valor]), 0, 0, 1);
trans ] ; [ViewContainer.layer setTransform: trans];

el segundo conduce directamente a las propiedades de la transformada:

1
2
3
4
viewContainer.layer; CALayer * = mylayer viewContainer.layer;
[ NSNumber numberWithDouble : DegreesToRadians ( [ sliderX value ] ) ] forKeyPath : @ "transform.rotation.x" ] ; [Mylayer setValue: [ NSNumber numberWithDouble: DegreesToRadians ([sliderX valor])] forKeyPath: @ "transform.rotation.x"];
[ NSNumber numberWithDouble : DegreesToRadians ( [ sliderY value ] ) ] forKeyPath : @ "transform.rotation.y" ] ; [Mylayer setValue: [ NSNumber numberWithDouble: DegreesToRadians ([valor sliderY])] forKeyPath: @ "transform.rotation.y"];
[ NSNumber numberWithDouble : DegreesToRadians ( [ sliderZ value ] ) ] forKeyPath : @ "transform.rotation.z" ] ; [Mylayer setValue: [ NSNumber numberWithDouble: DegreesToRadians ([sliderZ valor])] forKeyPath: @ "transform.rotation.z"];

El resultado es - por supuesto - exactamente lo mismo!

Algunas notas

impostata ad 1 . En el interior se encuentra el código en el archivo RotateLayerViewController.m una constante USE_CATRANSFORM establece en 1 . Esto sirve para utilizar un método de rotación en lugar de la otra:

1
# Definir USE_CATRANSFORM 1

Si se establece en 0, cambiará método.

) rispetto al quale effettuare le rotazioni: También dentro del código RotateLayerViewController.m , hay una parte sin comentar en caso de que quiera cambiar el punto de anclaje ( anchorPoint ) contra el que realizar las rotaciones:

1
2
/ / Eliminar la línea siguiente para cambiar el punto de anclaje
/ / = MyLayer.anchorPoint CGPointMake (0.1f, 0.8f);

. Por último, la función DegreesToRadians() le permite convertir de grados a radianes, y se define en el archivo RotateLayerViewController.m . Aunque yo prefiero usar la define :

1
2
3
4
5
6
7
8
9
10
11
12
13
/ *!
DegreesToRadians @ Definido
@ Abstract Convierte grados en radianes
@ Discusión Convierte grados en radianes
* /
# Definir degreesToRadians (x) (M_PI * x / 180,0)

/ *!
@ RadiandsToDegrees definidos
@ Abstract Convierte radianes a grados
@ Discusión Convierte radianes a grados
* /
# Definir radiandsToDegrees (x) (x * 180,0 / M_PI)

Por ejemplo, la fuente , haga clic aquí .

No hay comentarios para este post

Deja un comentario

TAG XHTML PERMISOS: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> ENTRADA CÓDIGO:
 <pre></pre> // blocco generico <code></code> // blocco generico [cc_actionscript][/cc_actionscript] // Actionscript [cc_actionscript3][/cc_actionscript3] // Actionscript 3 [cc_css][/cc_css] // CSS Style Sheet [cc_html][/cc_html] // HTML [cc_js][/cc_js] // Javascript [cc_objc][/cc_objc] // Objective-C [cc_php][/cc_objc] // PHP [cc_sql][/cc_sql] // SQL