2013-02-10 4 views
0

의 나는 다음과 같은 방법을 사용하여 뷰를 회전한다고 가정 해 봅시다 : 나는 각도에 넣어 무엇을 추적하지 않고이보기의 현재 회전 각도를 얻을 수있는 방법뷰를 회전 한 후 회전 각도를 얻기

  CGAffineTransform t = CGAffineTransform.MakeIdentity(); 
      t.Rotate (angle); 
      CGAffineTransform transforms = t; 
      view.Transform = transforms; 

을 변수를 처음 CGAffineTransform 할 때 변수? view.transform.xx/view.transform.xy 값과 관련이 있습니까? 이 xxxy 모든 다른 유사한 구성원이 정확히 의미,하지만 내 추측 * 당신은 전적으로 그 값을 사용하여 적용 변환을 역 추적 할 수 없을 것입니다 무엇

답변

1

확실하지 않음 (그것은 다시 추적 같은 것 1+2+3+41으로 시작하여 10 - 으로 끝났음을 알고 있습니다. *).

그런 경우 제 제안은 CGAffineTransform에서 파생되어 원하는 값을 저장하는 것이지만 구조적이므로 그렇게 할 수 없으므로 제 생각에는 최선의 선택은 다음과 같은 래퍼 클래스를 작성하는 것입니다.

당신은이 접근법은 한계가없는거야 볼 수 있지만, 당신이 항상 모든 정도 적용 MyTransform의 한 인스턴스를 사용할 수 있습니다

//do Your stuff 
MyTransform t = new MyTransform(); 
t.Rotate(angle); 
view.Transform = t; 
//get the rotation 
float r = t.Rotation; 

//unfortunately You won't be able to do this: 
float r2 = view.Transform.Rotation; 

:

class MyTransform 
{ 
    //wrapped transform structure 
    private CGAffineTransform transform; 

    //stored info about rotation 
    public float Rotation { get; private set; } 

    public MyTransform() 
    { 
     transform = CGAffineTransform.MakeIdentity(); 
     Rotation = 0; 
    } 

    public void Rotate(float angle) 
    { 
     //rotate the actual transform 
     transform.Rotate(angle); 
     //store the info about rotation 
     Rotation += angle; 
    } 

    //lets You expose the wrapped transform more conveniently 
    public static implicit operator CGAffineTransform(MyTransform mt) 
    { 
     return mt.transform; 
    } 
} 

이제 정의 된 연산자를 사용하면 다음과 같이이 클래스를 사용할 수 있습니다 변환의 rts 및 그 어딘가에 인스턴스를 저장할 수 있습니다 (또는, 아마도 그러한 변환의 모음).

또한 또는 MyTransform 클래스 번역 규모와 같은 다른 변환/저장 노출 할 수 있습니다,하지만 당신은 여기에서 갈 곳을 알 수 믿습니다.



* 는 정확히 내가 지금 갈거야 내가

+0

당신의 접근 방식은 고체 틀렸다면 정정 해줘 주시기합니다. 하지만 누군가가 빛을 비추는 빛이 있다면 그 느낌은 자유 롭다! – LampShade

관련 문제