이 “Modifying the Transform Data Structure” in the Core Animation Programming Guide 아래의 예를 제외하고 직접 설명하지 뭔가입니다 : Listing 2의
예는 관점으로 CATransform3D
변환을 구성하는 방법을 보여줍니다.
목록 2 CATransform3D 데이터 구조를 수정
직접
CATransform3D aTransform = CATransform3DIdentity;
// the value of zDistance affects the sharpness of the transform.
zDistance = 850;
aTransform.m34 = 1.0/-zDistance;
여기 무슨 일이야? 3D 변환 매트릭스는 4x4 매트릭스입니다 (3x3 매트릭스는 아닙니다). 세 번째 행의 네 번째 열 (1이 아닌 0부터 계산)은 Z 축을 따라 투시 변환을 제어합니다. "카메라"에서 Z = 0 평면 (화면이라고 생각할 수 있음)까지의 거리의 음의 역수로 설정합니다.
기본적으로 m34
은 0이며 카메라에서 화면까지의 거리가 무한대임을 나타냅니다. 무한대에서 모든 (유한) 점은 카메라에서 등거리이므로 아무런 시야가 없습니다. 이를 "직교 투영"이라고합니다.
거리를 더 작은 값 (m34
이 더 큼)으로 설정하면 점점 더 원근 투영이 높아집니다. 당신은 가치있는 것을 가지고 놀기를 원할 것입니다.
대부분의 레이어는 하위 레이어를 Z = 0 평면으로 평탄화합니다. 즉, 레이어에 적용한 투시 투영법은 하위 레이어에 적용되지 않으며 모든 하위 레이어의 변형을 설정해야합니다.
사용자가 특정 카드를 탭할 필요가없는 경우 카드 레이어를 CATransformLayer
의 하위 레이어로 추가해야합니다. CATransformLayer
은이 하위 레이어를 Z = 0 평면에 배치하지 않으므로 원근 투영 변환을 CATransformLayer
에만 적용 할 수 있으므로 개별 카드 레이어에 적용하는 것에 대해 걱정할 필요가 없습니다. 그러나 CATransformLayer
은 hitTest:
을 지원하지 않으므로 터치 이벤트로 어떤 카드를 터치했는지 쉽게 판단 할 수 없습니다.
CATransformLayer Class Reference
대단히 감사합니다. – RobertJoseph
많은 질문에 대한 좋은 답변입니다. – nielsbot
글쎄 답변. 매우 명확하고 요점. (투표를했습니다.) 나는이 자료를 알아 내려고 할 때이 게시물을 다시 읽으시기 바랍니다. 그 대신에 나는 며칠 동안 주위를 날랐다. –