我目前正在使用Three20 TTLauncher作为我的应用程序的基础。
但是,当点击TTLaunchItem时,它会跳转到映射的URL。
有什么方法可以使用facebook应用程序使用的相同“扩展”动画/转换?
答案 0 :(得分:4)
我假设您正在TTLauncherView中打开您的网址,如下所示:
- (void)launcherView:(TTLauncherView*)launcher didSelectItem:(TTLauncherItem*)item
{
[[TTNavigator navigator] openURLAction:[[TTURLAction actionWithURLPath:item.URL] applyAnimated:YES]];
}
要打开包含动画的网址,您必须为视图设置动画,然后按以下方式打开网址。
首先,您需要一个新变量来保存您的网址。转到LauncherView.h文件并定义新的NSString *_urlToOpen;
回到你的.m文件中我们需要另外两种方法。一个用于动画部分(仅动画视图)和另一个动画完成时被调用的动画部分。
我先发布动画代码,然后再解释。
-(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 View)。 将新视图的框架定义到屏幕边界,并在屏幕中间将其缩小到非常小的尺寸。现在我们设置动画以将视图缩放到其原始大小(屏幕边界)并使用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]];
}
第一行是不言自明的。然后我们只从superview中删除视图并打开我们的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网上论坛的论坛帖子。找到它here。
答案 1 :(得分:1)
我必须在我的一个项目中写一些类似的东西。
请参阅https://github.com/aporat/TTLauncherView_ExpandViewTransitions
此示例项目还包括返回启动器视图时的收缩效果。 Facebook启动器后退按钮