를 처리하는 방법한 번역 매트릭스 반전 Y 축의 관점
-
03-07-2019 - |
문제
내 usercase 아이폰 응용 프로그램 내가 애니메이션에서 규모,회전과 번역의 이미지입니다.
그래서,concat 모든 것이 변환 시설,그러나 한가지 문제가:
이후 나는 이미지 크기에 따라,그것은 문제를 배치합니다.내가 사용하는 반전 y 축 좌표계,가까운 이미지를 정확히 위치에서 60 에 있는 픽셀을 나타냅니다.
그래서,어떻게 변경하에서 원래의 데카르트 y 축을 역 y 축의 관점?
해결책
로 smacl 포인트는 가장 쉬운 방법은 이렇게 변화의 기원은 아래 화면의 왼쪽을 사용하여(screenheight-viewheight-y)을 대신 y 에서의 기원입니다.
그러나,당신이 할 수립 좌표계의 기본 뷰에서 레이어를 사용하여 CATransform3D.내가 이렇게 할 수 있도록 공유하는 동일한 핵심 애니메이션 CALayer 레이아웃의 코드 간에 내 아이폰 응용 프로그램 및 Mac 클라이언트(아이폰을 반전의 정상적인 석영에 대한 좌표계 CALayers 의 일치하 UIViews).당신이해야 할 모든 당신이 사용하려면 이것은 장소 라인
self.layer.sublayerTransform = CATransform3DMakeScale(1.0f, -1.0f, 1.0f);
에서 초기화를 위한 코드 레이어에 호스팅 UIView.을 기억하는 것이 뒤집어 CALayers,그래서 어떤 UIKit 텍스트 렌더링에서 레이어가해야 할 수도 있습 반전 유사한 코드를 사용하여 다음과 같다:
CGContextSaveGState(context);
CGContextTranslateCTM(context, 0.0f, self.frame.size.height);
CGContextScaleCTM(context, 1.0f, -1.0f);
UIFont *theFont = [UIFont fontWithName:@"Helvetica" size:fontSize];
[text drawAtPoint:CGPointZero withFont:theFont];
CGContextRestoreGState(context);
당신이 할 수 있는 비슷한 정렬이 사용하여 반전 CGAffineTransform,하지만 당신은 또한 적용해야는 번역하는 작업:
CGAffineTransform flipTransform = CGAffineTransformMakeTranslation(0.0f, self.frame.size.height);
flipTransform = CGAffineTransformScale(flipTransform, 1.0f, -1.0f);
당신이 사용할 수 있는 유사 변환로 변환하의 원산지를 사용하여 좌표 CGPointApplyAffineTransform().
다른 팁
y = top-y, 여기서 탑은 당신이 그리는 경계 상자의 상단의 y undentine입니다.