2011-10-25 5 views
2

필자는 5 개의 uiviewcontroller로 구성된 uitabbarcontroller를 가지고 있습니다.CATransition을 사용하여 좌우로 전환?

첫 번째 uiviewcontroller 뷰에서 버튼을 누르면 uiviewcontroller가 숨기고 새로운 uiviewcontroller가 오른쪽에서 왼쪽으로 전환되기를 원합니다. 나는 이것을 달성했다. 그러나 새로운 뷰의 버튼을 탭하면 앱이 다운된다 !!! 버튼에 코드가 붙어 있지 않습니다. EXEC_BAD_ACCESS 오류가 발생합니다.

왜 이런 일이 발생하고 새로운보기로이 문제를 극복 할 수 있는지 아는 사람이 있습니까?

모달 뷰 전환을 시도하면보기가 제대로 작동합니다. 이것은 CATransition을 사용하려고 할 때 발생합니다. modalview 전환에는 오른쪽에서 왼쪽으로 또는 왼쪽에서 오른쪽으로 전환이 없기 때문에 CATransition이 필요합니다!

도움을 주셨습니다.

답변

5

이 코드는 tabviewcontroller의 Uiview와 새로운 uiview 사이를 전환하는 데 필요한 코드입니다. 코드는 tabviewcontroller의 UI 중 하나에있는 버튼의 IBAction으로 이동합니다.

// 앱 대리자

AppDelegate에 AppDelegate에 = (AppDelegate에) [UIApplication sharedApplication] 위임] 초기화;

// 현재

에 UIView를 보여주는 것보기를 얻을 * currentView = self.view;

// 상기 하부 UIWindow 또는 현재 뷰 뷰

UIView의 theWindow * = [currentView의 수퍼]를 포함하는 뷰를 얻는다;

// remove the current view and replace with mynewView1 
[currentView removeFromSuperview]; 

// viewcontroller1에 새보기를 할당하십시오. 이것은 uitabbarcontroller의 첫 번째 컨트롤러입니다. 내 uitabbarcontroller 내 프로젝트에 5 uiviewcontrollers로 구성되어 있습니다. 버튼이 첫 번째 viewcontroller1에 존재하므로 이것이 새로운 뷰를 viewcontroller1에 할당하는 이유입니다.버튼은 내가 secondviewcontroller (viewcontroller2)에 새보기를 할당합니다 내 UITabBarController가의 secondviewcontroller (viewcontroller2)에서 누르면 등등 ...

appDelegate.viewController1=[[MyMessages alloc] initWithNibName:@"MyMessages" bundle:nil]; 

// 창

[theWindow addSubview:appDelegate.viewController1.view]; 

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

[[theWindow layer] addAnimation:animation forKey:@"SwitchToView1"]; 
에 추가 된 경우

도움 주셔서 감사합니다. 나는 그것을 달성하기 위해 하루 이상 동안 이것을 해왔다. 나는 그것이 동일한 문제를 가진 누군가를 도울 것이라는 점을 희망한다.

0

아마도 새로운보기 컨트롤러를 제대로 유지하지 못했을 것입니다. 하지만 UINavigatonController와 pushViewController/popViewController를 사용하지 않는 이유가 무엇입니까? 그게 훨씬 쉬워 질 것입니다.

+0

당신이 바로 Radu Lucaciu였습니다. 다음을해야했습니다. – stefanosn

+0

아래에서 내 asnwer를 확인해보십시오. 나는 코멘트로 올릴 수 없습니다. – stefanosn

0

"새로운보기"를 해제하는 데 문제가있을 것입니다.이 새로운보기는 제어기의보기가 아닌보기 제어기라는 의미입니다.

UIViewController *newVC=[[UIViewController alloc] init...]; 
[UIView beginAnimations:@"animId" context:nil]; 
[UIVIew transitionFromView:old.view toView:newVC.view duration:0.3f options:nil completion:nil]; 
[UIView commitAnimations]; 
[newVC release] 

당신은 새로운 뷰 컨트롤러를 해제합니다 (retainCount를 증가하지 않는 서브 뷰를 삽입), 그래서 당신은 (동작을 수행 할 때 :

나는 당신이 (또는 예를 들어) 이런 일을하려고하는 것 같아요 탭 단추)를 누르면 대상 (newVC)이 이미 해제되고 이로 인해이 오류가 발생합니다.

그래서이 뷰 컨트롤러에 대한 참조를 생성해야합니다 (예 : 보유 된 속성에 할당). 이 작업을 모달 적으로 수행 할 때 모달을 표시하는보기 컨트롤러는 자동으로 참조를 self.modalViewController에 유지합니다.

관련 문제