【问题标题】:How can I change the animation style of a modal UIViewController?如何更改模态 UIViewController 的动画样式?
【发布时间】:2012-03-31 01:15:11
【问题描述】:

我目前正在显示这样的 UIViewController:

[[self navigationController] presentModalViewController:modalViewController animated:YES];

并像这样隐藏它:

[self.navigationController dismissModalViewControllerAnimated:YES];

动画是“从底部向上滑动”......然后向下滑动。如何更改动画样式?我可以让它淡入/淡出吗?

干杯!

【问题讨论】:

    标签: iphone cocoa-touch


    【解决方案1】:

    对于 iPhone 3.0+,基本的淡入淡出是最容易做到的:

    modalViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    [[self navigationController] presentModalViewController:modalViewController
                                                   animated:YES];
    

    【讨论】:

    • 完美运行!!!我花了几秒钟才意识到必须将转换应用于正在呈现的 viewController 而不是 self。
    • 您可以在 Interface Builder 中执行此操作,例如,通过添加模态 segue 并将转换设置为 Cross Dissolve
    【解决方案2】:

    Marcus Zarra 在 SDK 邮件列表上发布了一个很好的解决方案:

    UIViewController *controller = [[[MyViewController alloc] init] autorelease];
    UIViewAnimationTransition trans = UIViewAnimationTransitionCurlUp;
    [UIView beginAnimations: nil context: nil];
    [UIView setAnimationTransition: trans forView: [self window] cache: YES];
    [navController presentModalViewController: controller animated: NO];
    [UIView commitAnimations];
    

    有翻转和卷页的过渡。如果您设置了淡入淡出,可以尝试调整新视图的 alpha:

    UIViewController *controller = [[[MyViewController alloc] init] autorelease];
    controller.view.alpha = 0.0;
    [navController presentModalViewController: controller animated: NO];
    [UIView beginAnimations: nil context: nil];
    controller.view.alpha = 1.0;
    [UIView commitAnimations];
    

    但是,您可能想要的是交叉淡入淡出,或者至少是淡入淡出。当 UINavigationController 切换到新视图时,它会删除旧视图。对于这种效果,您最好只向现有的 UIViewController 添加一个新视图并随着时间的推移淡化其 alpha。

    注意:如果您不在您的应用程序中,委托 [self window] 将无法工作。使用 self.view.window ,感谢 user412500 的帖子指出这一点。

    【讨论】:

    • 这是旧的!请参阅下面的 Simo Salminen 的回答! MrDatabase 你应该切换这个
    【解决方案3】:

    在 iOS 4 中更新 alpha 渐变:

    modalController.view.alpha = 0.0;
    [self.view.window.rootViewController presentModalViewController:modalController animated:NO];
    [UIView animateWithDuration:0.5
                     animations:^{modalController.view.alpha = 1.0;}];
    

    【讨论】:

      【解决方案4】:

      应该是[self.view.window] 才能使代码正常工作

      (至少在 ios 3.2 中是这样的)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-12-26
        • 2011-05-28
        • 2018-12-21
        • 2014-04-13
        • 2018-09-27
        • 1970-01-01
        • 2017-02-09
        相关资源
        最近更新 更多