使用淡入动画呈现模态视图

63

我模态地展示了一个登录界面,如果我有错误,请纠正我。

   UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
   UIViewController *ivc = [storyboard instantiateViewControllerWithIdentifier:@"login"];//LOOK AT NEXT LINE
   [self presentViewController:ivc animated:YES completion:nil];

登录界面确实出现,但动画效果是向上滑动的。我更喜欢淡入淡出的动画效果。我该怎么做?


可能是重复的问题:如何更改模态UIViewController的动画样式? - App Dev Guy
3个回答

148

只需为视图控制器设置modalTransitionStyle属性即可。(文档)

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *ivc = [storyboard instantiateViewControllerWithIdentifier:@"login"];
[ivc setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
[self presentViewController:ivc animated:YES completion:nil];

在Swift中:

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let viewController = storyboard.instantiateViewController(withIdentifier: "login")
viewController.modalTransitionStyle = .crossDissolve
present(viewController, animated: true, completion: nil)

1
你的方法比这个更好。 - Sandah Aung
9
好的,这是一个来自2008年的回答。我确信那时候这些属性还不可用。如果你看看那里得到最多赞同的答案,你会发现他们提出了相同的建议。 - ZeMoon
我必须承认我错过了那些。 - Sandah Aung
如果您使用.partialCurl,请确保父视图控制器的.modalPresentationStyle.fullScreen。来源:https://developer.apple.com/documentation/uikit/uimodaltransitionstyle/partialcurl - spnkr

51

Swift 3, 3.1, 4, 4.2 (截至2021年1月)

var storyboard = UIStoryboard(name: "Main", bundle: nil)
var loginViewController = storyboard.instantiateViewController(withIdentifier: "login")
loginViewController.modalTransitionStyle = .crossDissolve
self.present(loginViewController, animated: true, completion: nil)

7

您需要设置演示文稿和转换样式:

    self.activityAlertVC.modalPresentationStyle = .custom
    self.activityAlertVC.modalTransitionStyle = .crossDissolve

8
只有在设置了transitioningDelegate以支持自定义转场时,才将modalPresentationStyle设为.custom。演示风格与转场风格无关。 - rmaddy

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