Objective-C: como girar uma imagem no espaço 3D

), un oggetto di più basso livello con innumerevoli potenzialità. A classe UIView expõe um ponteiro para a camada ( CALayer ), sujeito a um nível inferior com um potencial infinito. A camada fornece uma série de métodos e propriedades relacionadas com a exposição do conteúdo da visão. Por exemplo, você pode manipular o conteúdo de uma exibição em espaço tridimensional. Nell ' exemplo, que eu relato é interessante notar que o código é simples, eo todo é feito usando o Interface Builder:

No teste que eu fiz eu coloquei um cheque UIImageView dentro de uma visão container. Isso é para mostrar que todos os objetos (views) são alteradas se agirmos no recipiente pai.

Nell exemplo fonte ligada ilustram dois processos diferentes para executar a rotação em três eixos. O primeiro faz uso das transformações:

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];

o segundo conduz directamente às propriedades da 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"];

O resultado é - obviamente - exatamente o mesmo!

Algumas notas

impostata ad 1 . Dentro de você encontrará o código no arquivo RotateLayerViewController.m uma constante USE_CATRANSFORM definido para 1 . Isto serve para usar em vez de um método de rotação do outro:

1
# Define USE_CATRANSFORM 1

Defini-lo para 0, vai mudar o método.

) rispetto al quale effettuare le rotazioni: Também dentro do código RotateLayerViewController.m , existe uma parte comentada no caso de você querer mudar o ponto de ancoragem ( anchorPoint ) contra a qual executar as rotações:

1
2
/ / Descomente a linha a seguir para alterar o ponto de ancoragem
/ / = MyLayer.anchorPoint CGPointMake (0.1f, 0.8f);

. Finalmente, a função DegreesToRadians() permite que você converter de graus para radianos, e é definido no arquivo RotateLayerViewController.m . Embora eu prefira usar a define :

1
2
3
4
5
6
7
8
9
10
11
12
13
/ *!
DegreesToRadians @ Definido
@ Resumo Converte graus em radianos
@ Discussão Converte graus em radianos
* /
# Define degreesToRadians (x) (x M_PI * / 180,0)

/ *!
@ RadiandsToDegrees Definidos
@ Resumo Converte radianos em graus
@ Discussão Converte radianos em graus
* /
# Define radiandsToDegrees (x) (x * 180.0 / M_PI)

Por exemplo, a fonte de aperte .

Não há comentários para este post

Deixe um comentário

TAG XHTML permita: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> código de entrada:
 <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