2010-08-04 2 views
1

설명하기에 너무 지루한 이유로 프로그램의 탭 막대를 프로그래밍 방식으로 변경하여 다른보기로 이동했습니다. 안타깝게도 그것은 순식간에 우리가 네비게이션 컨트롤러에서 pushViewController을했을 때 얻는 정상적인 스나이로드 효과를 원합니다.UITabBar의 선택된 탭을 바꿀 때 "정상적인"뷰 변환을 모방합니다.

내가 objc C에서 애니메이션을 사용하여 매우 경험이 오전, 나는 내 여기 발견 된 일부 코드를 사용하려고 시도 :이 종류의 애니메이션이하는

CGContextRef context = UIGraphicsGetCurrentContext(); 
[UIView beginAnimations:nil context:context]; 
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:[self view] cache:YES]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
[UIView setAnimationDuration:2.0]; 
[[[self nav] tabBarController] setSelectedIndex:2]; 
[UIView commitAnimations]; 

의 탐색 모음은 신비 위에서 표시하지 내가 원하는 걸 :

+1

나는 이것이 오래되었다는 것을 알고 있지만, iOS 4.0부터는 블록을 사용하여 새로운 UIView 전환 함수를 사용할 수 있습니다. 나는 매우 비슷한 것을했지만 setSelectedIndex라고 불렀습니다 : 완성 된 애니메이션 블록에서 잘 작동했습니다. – slycrel

답변

0

당신이 원하는 것을하기 위해 애니메이션을 얻는 가장 쉬운 방법은 당신이 원한다면 (화면 밖에있다), 먼저 [UIView ...] 블록을 시작하면 새 프레임이 설정됩니다. 그래서 일반적인 개요는 다음과 같습니다

CGRect newframe = theView.frame; 
newframe.origin.x = 320.0f; 
theView.frame = newframe; 

[UIView beginAnimations:nil context:nil]; 
      // btw the context is just your context for animation delegate callbacks! 
newframe.origin.x = 0.0f; 
theView.frame = newframe; 
[UIView commitAnimations]; 

이 모든 코드가 순식간에 실행 주, 그래서 setSelectedIndex뿐만 아니라 즉시 설정됩니다 :이 반군 UIView이 없기 때문에, 그것은 애니메이션되지 않습니다. 애니메이션을 지나서 어떤 것을 해고하려면 다른 질문을보십시오. (간단히 : animationDelegate 또는 performSelector : afterDelay를 사용하십시오 :)

관련 문제