2

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

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

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

4

2 回答 2

4

我假设您在 TTLauncherView 中打开您的 URL,如下所示:

- (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,以便用户在动画运行时无法点击任何按钮。然后我们从 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]];
}

第一行是不言自明的。然后我们只从 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 Groups 上的论坛主题。在这里找到它。

于 2011-07-28T06:25:42.370 回答
1

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

https://github.com/aporat/TTLauncherView_ExpandViewTransitions

此示例项目还包括返回启动器视图和 Facebook 启动器返回按钮时的收缩效果

于 2011-07-29T02:12:45.070 回答