2015-01-31 3 views
1

모달 변환을 사용하여 하나의 XIB에서 다른 XIB로 이동합니다. 한 가지를 제외하고는 모두 작동합니다. 전환이 시작되는 순간 모든 이동 애니메이션 나는 이전의 시각에서 해본 적이있다. 모든 고체 컬러 배경을두고 화면을 운항하는 효과를주는Dissolve transition은 UI 요소 프레임 변경을 되돌립니다.

- (IBAction)chooseInsight:(id)sender { 
    [CATransaction setCompletionBlock:^{ 
     ContainerViewController *insight = [[ContainerViewController alloc] init]; 
     insight.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 
     [self presentViewController:insight animated:YES completion:nil]; 
    }]; 
    [self animateExit]; 
} 

animateExit 방법은 여러 가지 UI 객체의 1 초 프레임의 움직임을 애니메이션을 여기

내가 함께 일하고 있어요 방법입니다 . 제 희망은이 단색 배경이 다음보기 인 ContainerViewController에 녹아 들었 으면합니다.

그러나 발생하면 UI 객체가 화면을 비행한다는 것입니다, 우리는 단색 배경을보고, 다음 버튼과 라벨 갑자기 모든 다시 그래서 그들은 ContainerViewController에 용해 웁니다.

왜 그런 일이 발생합니까? 애니메이션을 돕기 위해 이전 뷰의 이미지가 캐싱 되었습니까? 그렇다면 전환하기 전에 캐시를 새로 고칠 수 있습니까? 아니면 그렇지 않은 경우,이 작업을 원활하게 수행하려면 어떻게해야합니까?

편집 : 그것은 관련이 경우, 나는 애니메이션이 끝날 때까지 지연하는 방법에 대한 this answer에서 CATransaction 비트를 얻었다. 두 마리의 애니메이션이 문제의 근원이라고 말하는 내 목소리가 있습니다.하지만 iOS 애니메이션으로 어떻게 익숙하지는 않은지 알 수 있습니다. ...

답변

2

모든 동작 애니메이션 I 이전보기에서 수행 한 작업이 취소되었습니다.

당신은 그 파단의 프레임 (또는 센터)를 변경하여 그 애니메이션을 수행하기 때문에. Autolayout을 사용하고 있습니다. 너는 그렇게 할 수 없다. Frames와 Autolayout은 서로 적입니다.

전환이 발생하면 레이아웃이 발생합니다. 즉, 제약 조건은입니다. 즉, Autolayout 을 의미합니다. 그러나 당신은 제약 조건을 변경하지 않았습니다 (이것은 당신이해야만했던 것입니다). 프레임을 변경했습니다. 제약 조건이 이기기 때문에 모든 제약 조건은 제약 조건이 무엇인지 말하기 때문에 모든 것이 원래의 위치로 돌아갑니다.

+0

내 책을 참조하십시오. http://www.apeth.com/iOSBook/ch17.html#_animation_and_autolayout – matt

+0

이것은 중요한 감사입니다! 나는 자동 레이아웃을 비활성화하고 모든 것이 즉시 시작되었습니다. – Nerrolken

+0

@Nerrolken 그건 내가 실제로 생각한 해결책이 아니야. autolayout을 사용 중지하는 법을 배워야합니다. – matt