Transform 위젯
Transform 위젯은 4x4 변환 행렬을 사용하여 자식 위젯에 기하학적 변환을 적용합니다.
일반적인 변환
-
회전:
Transform({ transform: Matrix4.rotationZ(angle), child: /* widget */ })
-
크기 조절:
Transform({ transform: Matrix4.diagonal3Values(scaleX, scaleY, 1), child: /* widget */ })
-
이동:
Transform({ transform: Matrix4.translationValues(x, y, 0), child: /* widget */ })
-
기울이기:
Transform({ transform: Matrix4.skewX(value), child: /* widget */ })
Matrix4 연산
-
기본 연산:
Matrix4.identity()
: 항등 행렬 생성Matrix4.rotationZ()
: Z축 기준 회전Matrix4.translationValues()
: X, Y, Z 축 이동Matrix4.diagonal3Values()
: X, Y, Z 축 크기 조절
-
변환 조합:
const matrix = Matrix4.identity() .multiply(Matrix4.rotationZ(angle)) .multiply(Matrix4.translationValues(x, y, 0));
일반적인 사용 사례
-
카드 뒤집기 효과:
Transform({ transform: Matrix4.rotationY(isFlipped ? Math.PI : 0), child: Card() })
-
호버 시 크기 변경:
Transform({ transform: Matrix4.diagonal3Values( isHovered ? 1.1 : 1, isHovered ? 1.1 : 1, 1 ), child: Button() })
-
3D 회전:
Transform({ transform: Matrix4.rotationX(angleX) .multiply(Matrix4.rotationY(angleY)), child: Container() })
모범 사례
-
성능:
- 가능한 하드웨어 가속 사용
- 불필요한 변환 피하기
- 단순 이동은 Transform.translate 사용 고려
-
애니메이션:
- 부드러운 전환 사용
- 성능 영향 고려
- 다양한 기기에서 테스트
-
레이아웃 고려사항:
- 변환된 경계 영역 주의
- 터치/클릭 이벤트 올바르게 처리
- 부모 제약조건 고려
팁과 요령
-
원점:
- 회전을 위한 변환 원점 설정
- 위젯 중심점 vs 모서리 고려
- alignment 속성 활용
-
3D 효과:
- 깊이감을 위한 원근감 사용
- 여러 변환 조합
- 다양한 뷰포트에서 테스트
-
디버깅:
- 시각화를 위한 디버그 페인트 사용
- 변환된 경계 확인
- 터치 영역 검증