在加载之前设置rootViewController会导致黑屏闪烁

时间:2017-06-09 14:59:17

标签: ios objective-c iphone xcode rootviewcontroller

以编程方式设置rootViewController时出现了奇怪的行为。我只使用xib,这里是我已经尝试过的场景。 当我使用这段代码时,在正确加载VC之前会出现一小段黑屏。

- (void)setRootVC:(UIViewController *)viewController {
    UIWindow *window = [[[UIApplication sharedApplication] delegate] window];    
    [UIView transitionWithView:window
                      duration:0.0
                       options:UIViewAnimationOptionTransitionNone
                    animations:^{ window.rootViewController = viewController; }];
}

当我使用不同的功能时,它会消除眨眼,但还有另一种奇怪的行为。我在新VC中获得了大量文本字段,我在becomeFirstResponder方法中将其中一个设置为viewDidLoad,但是当VC加载时,textFieldDidEndEditing被调用,这是完全奇怪的。这是代码。

- (void)setRootVC:(UIViewController *)viewController {
        UIWindow *window = [[[UIApplication sharedApplication] delegate] window];
        [UIView transitionFromView:window.rootViewController.view
                             toView:viewController.view
                           duration:0.0                  
                            options:UIViewAnimationOptionTransitionNone
                         completion:^(BOOL finished){
                                    window.rootViewController = viewController;
                                    }];
}

我受到Objective-C的限制,所以快速的解决方案将无济于事。谢谢你的回复。

1 个答案:

答案 0 :(得分:0)

闪烁的原因是你设置了rootViewController,它应该在动画块中,所以下面的代码可能对你有所帮助..

[UIView transitionWithView:self.window
                  duration:0.5
                   options:UIViewAnimationOptionTransitionNone
                animations:^{ self.window.rootViewController = viewController; }
                completion:nil];

您可能希望添加一些过渡效果,而不是使用UIViewAnimationOptionTransitionNone,您可以使用UIViewAnimationOptionTransitionCrossDissolve代替它,它可能看起来更好......

希望它有所帮助。

干杯。