Three20 TTLauncher动画/转换
我目前使用Three20 TTLauncher作为我的应用程序的基础。Three20 TTLauncher动画/转换
但是,当点击TTLaunchItem时,它会跳转到映射的URL。
有什么办法可以使用Facebook应用程序使用的相同“扩展”动画/转换?
我假设你是这样打开你的网址在您的TTLauncherView:
- (void)launcherView:(TTLauncherView*)launcher didSelectItem:(TTLauncherItem*)item
{
[[TTNavigator navigator] openURLAction:[[TTURLAction actionWithURLPath:item.URL] applyAnimated:YES]];
}
打开的网址与你的动画视图,然后打开类似下面的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,以便用户在动画运行时无法点击任何按钮。然后我们得到我们想从TTNavigator打开动画的viewController并将其添加到实际视图(Launcher视图)中。 将我们新视图的框架定义为屏幕边界,并在屏幕中间将其缩小到非常小的尺寸。现在我们设置动画以将视图缩放到原始大小(屏幕边界),并使用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上的论坛主题。找到它here。
我不得不在我的一个项目中编写类似的东西。
见https://github.com/aporat/TTLauncherView_ExpandViewTransitions
此示例项目还包括收缩效应将发射视图时回& Facebook的发射后退按钮
这是完美的我所需要的!非常感谢! –
嗨好吧,永远的摆弄后,我似乎无法拦截后退按钮...我用这个,但它没有打电话。'UIBarButtonItem * newBackButton = [[UIBarButtonItem alloc] initWithTitle:@“Back”style:UIBarButtonItemStyleBordered target:launcherView action:@selector(shrinkAnimation)]; [[self navigation item] setBackBarButtonItem:newBackButton];' –
在我的情况下(使用Three20基于URL的导航),自动出现后栏按钮。新的视图控制器被推到导航堆栈上,因此后退按钮出现。所以我不需要自己做。我不知道你是否可以编辑选择器,当你点击后退按钮时会被调用。 – audience