首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >RootViewController切换过渡动画

RootViewController切换过渡动画
EN

Stack Overflow用户
提问于 2011-10-09 21:25:52
回答 7查看 50.3K关注 0票数 127

在appDelegate中用新的视图控制器替换现有的视图控制器作为根视图控制器时,有没有办法获得过渡/动画效果?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-10-09 21:49:58

您可以将rootViewController的切换包装在过渡动画块中:

代码语言:javascript
复制
[UIView transitionWithView:self.window
                  duration:0.5
                   options:UIViewAnimationOptionTransitionFlipFromLeft
                animations:^{ self.window.rootViewController = newViewController; }
                completion:nil];
票数 276
EN

Stack Overflow用户

发布于 2014-05-06 19:35:19

试试这个吧。对我来说很好。

代码语言:javascript
复制
BOOL oldState = [UIView areAnimationsEnabled];
[UIView setAnimationsEnabled:NO];
self.window.rootViewController = viewController;
[UIView transitionWithView:self.window duration:0.5 options:transition animations:^{
    //
} completion:^(BOOL finished) {
    [UIView setAnimationsEnabled:oldState];
}];

编辑:

这个更好。

代码语言:javascript
复制
- (void)setRootViewController:(UIViewController *)viewController
               withTransition:(UIViewAnimationOptions)transition
                   completion:(void (^)(BOOL finished))completion {
    UIViewController *oldViewController = self.window.rootViewController;
    [UIView transitionFromView:oldViewController.view 
                        toView:viewController.view
                      duration:0.5f
                       options:(UIViewAnimationOptions)(transition|UIViewAnimationOptionAllowAnimatedContent|UIViewAnimationOptionLayoutSubviews)
                    completion:^(BOOL finished) {
        self.window.rootViewController = viewController;
        if (completion) {
            completion(finished);
        }
    }];
}
票数 10
EN

Stack Overflow用户

发布于 2015-10-18 05:59:11

为了避免以后在应用程序中使用过渡翻转时出现问题,最好也从堆栈中清除旧视图

代码语言:javascript
复制
UIViewController *oldController=self.window.rootViewController;

[UIView transitionWithView:self.window
                  duration:0.5
                   options:UIViewAnimationOptionTransitionCrossDissolve
                animations:^{ self.window.rootViewController = nav; }
                completion:^(BOOL finished) {
                    if(oldController!=nil)
                        [oldController.view removeFromSuperview];
                }];
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7703806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档