Я предполагаю, что вы открываете свой URL в вашем TTLauncherView следующим образом:
- (void)launcherView:(TTLauncherView*)launcher didSelectItem:(TTLauncherItem*)item
{
[[TTNavigator navigator] openURLAction:[[TTURLAction actionWithURLPath:item.URL] applyAnimated:YES]];
}
Чтобы открыть URL с анимацией, вы должны анимировать представление, а затем открыть URL-адрес, как показано ниже.
Сначала вам нужна новая переменная для хранения вашего URL. Перейдите в файл LauncherView.h и определите новый NSString *_urlToOpen;
Вернемся к вашему файлу .m, нам нужно еще 2 метода. Один для анимации (только для анимации вида) и другой, который вызывается после завершения анимации.
Сначала выкладываю код для анимации, а потом объясняю.
-(void)animateTransition:(NSNumber *)duration {
self.view.userInteractionEnabled=NO;
viewController = [[[TTNavigator navigator] viewControllerForURL:_urlToOpen] retain];
[[self view] addSubview:viewController.view];
viewController.view.frame=[[UIScreen mainScreen] bounds];
viewController.view.transform=CGAffineTransformMakeScale(0.01, 0.01);
viewController.view.hidden=false;
[UIView beginAnimations:@"animationExpand" context:NULL];
[UIView setAnimationDuration:[duration floatValue]];
viewController.view.transform=CGAffineTransformMakeScale(1, 1);
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
[UIView commitAnimations];
}
Сначала мы устанавливаем для userInteractionEnabled значение NO, чтобы пользователь не мог нажимать какие-либо кнопки во время анимации. Затем мы получаем viewController, который мы хотим открыть анимированно из TTNavigator, и добавляем его в фактическое представление (представление запуска).
Определите рамку нашего нового вида для границ экрана и уменьшите его до очень маленького размера в середине экрана. Теперь мы настроим анимацию для масштабирования вида до его исходного размера (границы экрана) и запустим анимацию с помощью DidStopSelector.
DidStopSelector выглядит следующим образом:
-(void)animationDidStop:(NSString *)animationID finished:(BOOL)finished context:(void *)context{
self.view.userInteractionEnabled=YES;
viewController.view.hidden=true;
[viewController.view removeFromSuperview];
[viewController release];
[[TTNavigator navigator] openURLAction:[[TTURLAction actionWithURLPath:_urlToOpen] applyAnimated:NO]];
}
Первая строка не требует пояснений. Затем мы только удаляем представление из суперпредставления и открываем наш URL, но без анимации перехода.
Наконец, отредактируйте ваш метод - (void)launcherView:(TTLauncherView*)launcher didSelectItem:(TTLauncherItem*)item
, чтобы сохранить URL в новой переменной и вызвать метод animateTransition.
- (void)launcherView:(TTLauncherView*)launcher didSelectItem:(TTLauncherItem*)item
{
_urlToOpen = [NSString stringWithString:item.URL];
[self performSelector:@selector(animateTransition:) withObject:[NSNumber numberWithFloat: 0.60f]];
}
То же самое работает в другом направлении, но вам нужно позаботиться о том, что произойдет, если пользователь нажмет кнопку «Назад» на панели навигации. Нормальное поведение - анимировать назад с помощью стандартной анимации слайдов.
Этот ответ основан на ветке форума в Three20 Google Groups. Найдите его здесь .