如何实现 Facebook 风格的过渡效果

6

想要实现类似Facebook和许多其他应用程序中使用的视图控制器转换,已附上快照。这是否需要使用CoreAnimation框架或者在工具包中可用?


在Cocoa Touch中没有这个功能,你需要将两个视图和视图控制器放在屏幕上,并自己处理将顶部视图拖到一边的操作。 - David Rönnqvist
有任何入门的资料或资源吗? - Firdous
抱歉,我不知道任何好的资源。 - David Rönnqvist
2个回答

4

除非你想导入一个第三方框架,否则你必须使用CoreAnimation,但是使用CoreAnimation非常简单,我建议你学习它,因为它非常强大。这里是最简单的方法,以便让你有一个想法。一旦你掌握了它,你可以自己更好地调整它来适应你的需求:

在你的视图控制器中有两个视图:

@interface yourViewController : UIViewController {
    // The facebook view in the example, this will be the view that moves.
    // Init this view with x=0 and let it cover the whole screen.
    IBOutlet UIView *topView; 

    // The fb menu in the example
    // Init this view so that it stays behind the topView.
    IBOutlet UIView *bottomView; 

    BOOL menuVisible; // init to false in viewDidLoad!
}

请将它们在界面构建器中创建,或通过代码或您习惯的任何方式创建。使它们互相重叠,这样您只能看到顶部视图,并让底部视图留在其后面。
当用户按下按钮显示菜单时:
-(IBAction)menuButtonPressed:(id)sender {
    // Set up animation with duration 0.5 seconds
    [UIView beginAnimations:@"ToggleMenu" context:nil];
    [UIView setAnimationDuration:0.5];

    // Alter position of topView

    CGRect frame = topView.frame; 

    if (menuVisible) {
        frame.origin.x = 0;
        menuVisible = NO;
    } else {
        frame.origin.x = 300; //Play with this value
        menuVisible = YES;
    }

    topView.frame = frame;   

    // Run animation
    [UIView commitAnimations];
}

当然,您应该为“Facebook视图”和“菜单视图”等实现自己的UIView子类,并在上面的示例中用于topView和bottomView。

嗨,我也在尝试在我的 iPhone 应用程序中实现相同的功能。我像你建议的那样使用了两个 UIView,并使用 toggleMenu 动画来滑动 topView。但是,由于我有一个 UINavigationController,它不会随着 topView 滑动,而是保持在原地。我该怎么办?非常感谢您的建议。 - Yasodha
由于这是一个“自己动手”的解决方案,将其与UINavigationController结合起来会很复杂。如果您无法接受NavigationController停留在视图顶部,您可以停止使用它并制作自己的导航栏(我建议这样做),或者在菜单可见时隐藏它。我相信也有一些方法可以将其推到一边,但我不认为这样做有足够的价值去尝试找出如何... - jake_hetfield
@user1280436,你可以尝试使用navigationcontroller.view来实现动画效果,这样导航栏也会跟着一起动。我之前没有尝试过,请你试一下。 - Naveen Shan

1

嗨,我也在尝试在我的 iPhone 应用程序中实现相同的功能。我按照建议使用了两个 UIView,并使用 toggleMenu 动画来滑动 topView。但由于我有一个 UINavigationController,它不会随着 topView 滑动,而是保持在原地。我该怎么办?非常感谢您的建议。提前致谢。 - Yasodha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接