【问题标题】:Why does hiding my status bar completely break my simple animation?为什么隐藏我的状态栏会完全破坏我的简单动画?
【发布时间】:2013-12-12 18:48:48
【问题描述】:

示例项目: http://cl.ly/0O2t051o081p

我想实现this question 中所述的滑出侧边栏,其中状态栏也会移动。我一切正常,侧边栏滑动,但是一旦我尝试隐藏状态栏以完成“幻觉”,它就会停止任何事情发生,侧边栏不再滑出。

这是我的代码:

- (void)viewDidAppear:(BOOL)animated {
    double delayInSeconds = 1.0;
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
        [self.PostsView addSubview:[[UIScreen mainScreen] snapshotViewAfterScreenUpdates:NO]];

        hide = YES;
        [self setNeedsStatusBarAppearanceUpdate];

        [UIView animateWithDuration:1.0 animations:^{
            CGRect postsFrame = self.PostsView.frame;
            postsFrame.origin.x = self.MenuView.frame.size.width;

            self.PostsView.frame = postsFrame;
        }];
    });
}

我的代码基本上由一个包含视图控制器组成,该控制器包含两个子视图控制器(主视图控制器和侧边栏视图控制器),这些子视图控制器内置在 Storyboard 中。

我也尝试将 plist 中的View controller-based status bar appearance 设置为NO 并调用[[UIApplication sharedApplication] setStatusBarHidden],但在它中断的地方会出现完全相同的结果。

我做错了什么?

【问题讨论】:

    标签: ios objective-c uiview uiviewcontroller ios7


    【解决方案1】:

    我不确定为什么那条线会打断你的动画,但如果我按照你在上一段中所说的操作,它可以正常工作,但在动画之前向视图添加了 layoutIfNeeded(我确实设置了基于视图控制器的状态栏在 info.plist 中显示为 NO)。

    - (void)viewDidAppear:(BOOL)animated {
        double delayInSeconds = 1.0;
        dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
        dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
            [self.PostsView addSubview:[[UIScreen mainScreen] snapshotViewAfterScreenUpdates:NO]];
            [[UIApplication sharedApplication] setStatusBarHidden:YES];
            [self.view layoutIfNeeded];
            hide = YES;
            [UIView animateWithDuration:1.0 animations:^{
                CGRect postsFrame = self.PostsView.frame;
                postsFrame.origin.x = self.MenuView.frame.size.width;
    
                self.PostsView.frame = postsFrame;
            }];
        });
    }
    

    也没有必要实现 prefersStatusBarHidden。

    【讨论】:

    • 为什么需要 layoutIfNeeded?
    • @DougSmith,我认为它会立即隐藏状态栏,因此隐藏不会干扰动画。在某些情况下,一个动画会取消另一个动画——这似乎正在发生。
    猜你喜欢
    • 1970-01-01
    • 2015-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-20
    • 1970-01-01
    • 2013-06-25
    相关资源
    最近更新 更多