Three20 TTLauncher动画/过渡

时间:2011-07-27 13:50:36

标签: animation three20 transition ttlauncherview ttlauncheritem

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

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

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

2 个答案:

答案 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启动器后退按钮