【问题标题】:Root view controller's view disappears when pushing another view controller推送另一个视图控制器时,根视图控制器的视图消失
【发布时间】:2014-03-28 23:56:06
【问题描述】:

我正在尝试在我的UINavigationController 的根视图控制器上推送UIViewController。我正在使用自定义过渡来做到这一点,使其看起来像模态演示。

CATransition* trans = [CATransition animation];
trans.type = kCATransitionMoveIn;
trans.subtype = kCATransitionFromTop;
trans.duration = 0.4f;
trans.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
[self.navigationController.view.layer addAnimation:trans forKey:nil];
[self.navigationController pushViewController:vc animated:NO];

我的问题是,self 视图控制器的视图在我按下时似乎消失了,因此模态演示背后的背景在过渡运行时变为黑色。

这张图片说明了这个问题:

过渡完成后,洋红色视图按预期可见,但在过渡发生时,绿色背景消失。

【问题讨论】:

    标签: ios objective-c cocoa-touch ios7


    【解决方案1】:

    由于您使用的是 iOS 7,因此您应该使用新的自定义转换协议来处理此问题,而不是自己为图层设置动画。问题是导航控制器会在你调用 push 时立即更新视图模型,因为你告诉它不要动画,从屏幕上删除前一个视图——可能还有视图层次结构。

    【讨论】:

    • 正确。 UINavigationController 的工作方式是,当您推送没有动画的新视图控制器时,它会立即显示新视图并隐藏以前的视图。有两种正确的方法来完成它:1)使用新的自定义转换协议,2)创建自己的容器视图控制器而不是使用 uinavigationcontroller。这个新容器将负责更改和动画子视图控制器。
    【解决方案2】:

    试试这个,

    CATransition *animation = [CATransition animation];
            [animation setDuration:0.40];
            [animation setType:kCATransitionReveal];
    
            [animation setSubtype:kCATransitionFromBottom];
    
            [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
    
            [navController.view.layer addAnimation:animation forKey:nil];
            [navController pushViewController:viewController animated:NO]; 
    

    【讨论】:

      猜你喜欢
      • 2016-10-22
      • 2010-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多