Animation 三个20 TTLauncher动画/过渡

Animation 三个20 TTLauncher动画/过渡,animation,three20,transition,ttlauncherview,ttlauncheritem,Animation,Three20,Transition,Ttlauncherview,Ttlauncheritem,我目前正在使用Three20 TTLauncher作为我的应用程序的基础 但是,当点击TTLaunchItem时,它会跳转到映射的URL 有什么方法可以让我使用facebook应用程序使用的相同“扩展”动画/转换吗?我假设您正在TTlauncher视图中打开URL,如下所示: - (void)launcherView:(TTLauncherView*)launcher didSelectItem:(TTLauncherItem*)item { [[TTNavigator navigat

我目前正在使用Three20 TTLauncher作为我的应用程序的基础

但是,当点击TTLaunchItem时,它会跳转到映射的URL


有什么方法可以让我使用facebook应用程序使用的相同“扩展”动画/转换吗?

我假设您正在TTlauncher视图中打开URL,如下所示:

- (void)launcherView:(TTLauncherView*)launcher didSelectItem:(TTLauncherItem*)item 
{
    [[TTNavigator navigator] openURLAction:[[TTURLAction actionWithURLPath:item.URL] applyAnimated:YES]];
}
-(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,必须在中设置视图动画,然后按如下方式打开url

首先,需要一个新变量来保存URL。转到LauncherView.h文件并定义一个新的
NSString*\u 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视图)。 将我们的新视图定义为屏幕边界,并将其缩小到屏幕中间的一个非常小的尺寸。现在,我们设置动画以将视图缩放到其原始大小(屏幕边界),并使用DIDSTOP选择器启动动画

DidStopSelector如下所示:

- (void)launcherView:(TTLauncherView*)launcher didSelectItem:(TTLauncherItem*)item 
{
    [[TTNavigator navigator] openURLAction:[[TTURLAction actionWithURLPath:item.URL] applyAnimated:YES]];
}
-(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]];  
}
同样的方法也适用于其他方向,但是如果用户点击导航栏上的“后退”按钮,您必须关心会发生什么。正常行为是使用标准幻灯片动画设置动画


这个答案是基于三个20谷歌集团的一个论坛帖子。找到它。

我不得不在我的一个项目中写一些类似的东西


此示例项目还包括返回launcher视图时的收缩效果&Facebook launcher back按钮

这非常适合我的需要!非常感谢你!嗨,好吧,在永远的摆弄之后,我似乎无法截获后退按钮。。。我用过这个,但它不能调用
UIBarButtonItem*newBackButton=[[UIBarButtonItem alloc]initWithTitle:@“后退”样式:UIBarButtonItemStyleBordered目标:启动器视图操作:@selector(shrinkAnimation)];[[self-navigationItem]setBackBarButtonItem:newBackButton]
在我的例子中(使用基于Three20 URL的导航),back bar按钮会自动出现。新的视图控制器被推到导航堆栈上,因此会出现“后退”按钮。所以我不需要自己做。我不知道你是否可以编辑选择器,当你点击后退按钮时会调用它。