2010-08-04 3 views
1

По причинам, слишком скучным для описания, я программно меняю панель вкладок приложения, чтобы перейти к другому виду. К сожалению, это мгновенно, и мы хотели бы получить нормальный шумный эффект загрузки, который вы получите, когда вы сделаете pushViewController на навигационном контроллере.Подражание «нормальному» представлению при изменении выбранной вкладки UITabBar

Я очень неопытный с использованием анимации в ObjC с, я попытался использовать некоторый код, который я нашел здесь мой:

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 участвует там, не анимированные. Чтобы убрать что-то мимо анимации, взгляните на другие вопросы. (вкратце: используйте анимациюDelegate или выполнитеSelector: afterDelay :)

Смежные вопросы