번역하고 동시에 회전하려는 CALayer가 있습니다. 내가 실제로 작동 할 수있는 다음과 같은 코드가 있습니다CATransform3D를 사용하여 CALayer를 회전하고 변환하는 올바른 순서는 무엇입니까
// layer 1:
// translate: (△x, △y, △z) = (length/2, 0, length/2)
// rotate around y: 90 degree
CATransform3D transformLayer1 = CATransform3DIdentity;
transformLayer1 = CATransform3DTranslate(transformLayer1, length/2, 0, length/2 );
transformLayer1 = CATransform3DRotate(transformLayer1, M_PI_2, 0, 1, 0);
self.layer1.transform = transformLayer1;
을 내 테스트 동안을, 나는 예를 들어, 코드는 다음과 같이 변경, 번역 및 회전의 순서를 변경하면 변형 결과가 다를 수 찾기 :
디버깅에서CATransform3D transformLayer1 = CATransform3DIdentity;
// do rotation firstly, and then translation
transformLayer1 = CATransform3DRotate(transformLayer1, M_PI_2, 0, 1, 0);
transformLayer1 = CATransform3DTranslate(transformLayer1, length/2, 0, length/2 );
self.layer1.transform = transformLayer1;
, I는 각 단계에서의 변환 행렬의 값을 출력한다. 결과는 m43의 값이 다른 것을 보여줍니다. 왜 이런 일이 일어 났는지 설명 할 수있는 사람이 있습니까? 또는 CATransform3DTranslate() 및 CATransform3DRotate()의 Core Animation 기능을 이해하는 방법은 무엇입니까?
감사를 (아마도 빠른이 작업을 수행하지만 확실하지 메신저하는
*
연산자를 오버로드 할만큼 똑똑) 뭐죠 좌우 곱의 측면에서 계속 볼 수 있습니다. I는 함수 회전 (각도, X, Y, Z) * t 매트릭스 승산에 기초를 리턴하는 진짜임을 나타내는 것, 헤더 파일 CATransform3DRotate의 의견을 조사했다. 나는 이것을 aswer로 표시 할 것이다 :) –