), 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