2013-03-28 2 views
2

그래서보기가 화면에서 벗어나 사용자 제스처를 기반으로 다시 돌아 오는 간단한 애니메이션을 만들어야했습니다. 내 애니메이션 코드 (아래)가 정말 잘 작동합니다. 실제로 그것은 너무 잘 작동합니다. 어떻게 enterStage 메서드에서 뷰의 위치를 ​​변경하지 않는지 주목하십시오. 방금 스케일을 1로 설정했습니다.보기가 들어가서 감기는데 원래 위치가 좋습니다. 대신 CGAffineTransformMakeTranslation을 수행하고 스케일을 수행하지 않으면 완벽하게 작동합니다. 나는 원래 크기와 위치를 추적해야 할 필요가 있다고 예상했지만, 다소 유쾌하게 나에게 행해지는 것처럼 보인다.UIView animateWithDuration이 원래 상태로 돌아갑니다

이것은 신비합니다.

원래 크기와 위치에 대한 데이터는 어디에 보관됩니까? 보기가 원래 위치를 기억하지 못하도록하고 싶다면 어떻게하면 좋을까요? 따라서 단순히 취소, 어떠한 번역 포함되지는 1x1 크기 변환,로 변환하여 출력 전환에

-(void) exitStage{ 

    [UIView animateWithDuration:0.5 
          delay:0 
         options:UIViewAnimationOptionBeginFromCurrentState 
        animations:(void (^)(void)) ^{ 
         CGAffineTransform t = CGAffineTransformMakeTranslation(0, -1000); 
         self.transform = CGAffineTransformScale (t, 10.0, 10.0); 
        } 
        completion:^(BOOL finished){ 
        }]; 
} 

-(void) enterStage{ 

    [UIView animateWithDuration:0.5 
          delay:0 
         options:UIViewAnimationOptionBeginFromCurrentState 
        animations:(void (^)(void)) ^{ 
         //self.transform = CGAffineTransformMakeTranslation(0, self.originalYcoord); 
         self.transform = CGAffineTransformMakeScale(1,1); 
        } 
        completion:^(BOOL finished){ 
        }]; 
} 

답변

3

당신은 (10,10)로 이동하기 위해 번역을 설정하지만 입력 전환, 당신은 설정 당신은 당신이

self.transform = CGAffineTransformScale(self.transform, 1, 1); 
//or 
self.transform = CGAffineTransformTranslate(self.transform, 10, 10); 
+1

+1, 그래,이 같은 일을 할 필요가 원래의 변환을 유지하고 그것에 수정을하고 싶었다면 그냥

를 삭제하여 번역. –

+0

... 그렇다면 정보가 보관되는 위치는 어디입니까? UIView의 프레임은 동일하게 유지되며 변환에 의해 수정되지 않습니까? 나는 그것을 확인하지 않았다. – NFG

+0

정보는 변환 속성에 저장되며, OS가 객체를 그릴 때 draw하는 데 변환을 적용합니다. –

관련 문제