2009-07-19 5 views
1

내가이보기에있는 UIView에서 전환 (UIViewAnimationTransitionFlipFromLeft를) 시작할 때 내가 "뒤로"버튼과 UIToolBar와의 UIView가이 버튼은 전환 왜의 끝에 나타납니다? Pls는 저에게는 아이폰 UIToolBar UiBarButtonItem 전환 문제

감사

도움말

코드 :

[UIView beginAnimations:@"View Flip" context:nil]; 
[UIView setAnimationDuration:0.90]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
    UIViewController *coming = nil; 
UIViewController *going = nil; 
    UIViewAnimationTransition transition; 
going = languageMenu; 
coming = loadingmenu; 
transition = UIViewAnimationTransitionFlipFromLeft; 
    [UIView setAnimationTransition: transition forView:self.view cache:YES]; 

[coming viewWillAppear:YES]; 
[going viewWillDisappear:YES]; 

[going.view removeFromSuperview]; 
[self.view insertSubview: coming.view atIndex:0]; 
[going viewDidDisappear:YES]; 
[coming viewDidAppear:YES]; 

[UIView commitAnimations]; 
+0

코드를 표시 할 수 있습니까? –

+0

캐시를 활성화 한 경우 : 전환 중에 버튼이 표시되지만 모두 매우 느립니다? 어떤 아이디어? –

답변

1

UIToolbar와 그 뒤로 단추를 만들 때와 새로운보기에 추가 할 때마다 달라집니다.

또한 viewWillAppear 및 viewWillDisappear 행이 애니메이션의 일부가되어야하는 특별한 이유가 있습니까? 나는 그들을 애니메이션에서 끌어 내고, 애니메이션이 완료 될 때 호출되는 콜백 함수로 viewDidDisappear 및 viewDidAppear를 이동하는 것으로 실험 할 것입니다. UIView setAnimationDidStopSelector에 대한 문서를 참조하십시오.

도움이 될지 확실하지 않지만 알 수 있습니다.

+0

감사합니다 Amagrammer 나는 애니메이션 블록에서 viewWillAppear 및 viewWillDisappear를 옮겨서 이제는 잘 작동합니다. 감사합니다! –

+0

대단히 환영합니다! 스택 오버플로에 대해 정말 도와 준 첫 번째 인물입니다. – Amagrammer

0

캐시 전환 작업은 아이폰이 윈도우의 스냅 샷을 캡처하고 이미지 인 것처럼 일부 변환을 수행하는 방식. 캐시되지 않은 전환은 실제로 변환 된 라이브 창을 다시 그립니다.

문제는 스냅 샷을 찍을 때보기에 뒤로 버튼이없는 것 같습니다. 해결 방법은 탐색보기 컨트롤러 나 다른 것에 의존하지 않고 단추를 수동으로 추가하는 것입니다.

0

두보기의 차이가있을 수 있습니다. IB의 두 가지 관점 속성을 살펴보십시오. 둘 다에 대한 상태 표시 줄을 지정 했습니까? 아니면 단지 그들 중 하나? 이로 인해 수직 오프셋에 차이가 생길 수 있으며 생각했던 문제가 발생할 수 있습니다. (이것은 또한 다음 캐시로 되돌릴 수 있도록해야합니다 : YES)

newViewController.view.frame = self.view.frame; 

:

당신은 아마도 애니메이션 전환 코드 앞에 평등하여 두 개의 프레임을 설정하여이 작은 문제를 해결할 수

[[self.view superview] addSubview:newViewController.view]; 
: 또 다른 문제는, 당신은 따라서, 대신 현재 윈도우의 현재 뷰의 현재 창에에게 하위 뷰를 추가하는 것을 고려 할 수 있습니다

이렇게하면 모든 창 이벤트에 대한 명시 적 호출을 제거 할 수 있습니다. 또한, 그렇지 않으면 애니메이션이 작동하지 않습니다 현재보기 대신 창으로의 전환을 연결해야합니다

[UIView setAnimationTransition:transition forView:self.view.superview cache:YES]; 

나는 비슷한 문제로 어려움을 겪고, 결국이 권리를했습니다. 이것을으로

[self.view removeFromSuperview]; 

: 귀하의 추가 서브 뷰를 교체

#import <QuartzCore/QuartzCore.h> 

// ... 

    // get the view that's currently showing 
    UIView *currentView = self.view; 
    [currentView retain]; 
    // get the the underlying UIWindow, or the view containing the current view 
    UIView *theWindow = [currentView superview]; 

    UIView *newView = myNewViewController.view; 
    newView.frame = currentView.frame; 

    // add subview 
    [theWindow addSubview:newView]; 

    // set up an animation for the transition between the views 
    CATransition *animation = [CATransition animation]; 
    [animation setDuration:0.8]; 
    [animation setType:kCATransitionPush]; 
    [animation setSubtype:kCATransitionFromRight]; 
    [animation setTimingFunction:[CAMediaTimingFunction 
      functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; 

    [[theWindow layer] addAnimation:animation forKey:@"SwitchToView1"]; 

그리고 (물론 반대 방향으로 제외) 동일한 작업을 수행, 다시 전환 : 당신은 또한 QuartzCore 재단 애니메이션을 사용하여 시도 할 수 있습니다 이전 창은 포 그라운드로 다시 올 것이나 이벤트는 트리거되지 않습니다 (여전히 이유는 확실하지 않습니다).

나는이 일이 당신을 위해 일종의 일을하고 많은 사람들을 돕기를 바랍니다.