HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了iphone – 当我们执行presentViewController时会发生什么事情?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
给出以下代码

self.view.BACkgroundColor = [UIColor yellowColor];
MyViewController *myVC = [[MyViewController alloc] initWithNibName:@"MyView" bundle:nil]
myVC.view.BACkgroundColor = [UIColor clearColor];
myVC.modalPresentationStyle = UIModalPresentationFullScreen;
[self presentViewController:myVC animated:NO completion:nil];

当我们调用presentViewController时,会发生什么?当myVC可见时,我看不到黄色,然后在viewDidAppear方法中检查myVC.view.superView,它是UIWindow.

Q1.这是意味着,直到模态窗口up.TheViewController.view(self.view在上面的情况下)从View层次结构中删除并在DisplayWindowViewViewController.view(在上述情况下的myVC.view)被添加通过UIWindow?

Q2.如果myVC.modalPresentationStyle!= UIModalPresentationFullScreen会发生什么情况?

Q3. iOS还会从UIWindow中除去presentationViewController.view之外的所有视图,直到全屏模态对话框进行优化?如果没有为什么不呢?

解决方法

首先,我们来讨论没有动画的情况.

在致电前:

>您的窗口具有一个视图层次结构,从其rootViewController视图开始.

来电后:

>视图层次结构仍然存在而不改变.
>一个特殊的全屏视图被称为“调光视图”,被添加到窗口中(也就是说,不在内部的viewViewController视图中,而是在窗口内(窗口也是一个UIView),这个视图是透明的,使显示控件和模块变暗用户互动.
>所呈现的(模态)控制器的视图然后也被添加到窗口中.

窗口和控件的窗口之间还有其他一些视图.如果您记录视图层次结构,您将看到名为_ControllerWrapperView或类似的类.但是,这在iOS版本之间发生了变化,您不应该依赖视图结构.
请注意,模态控制器不能透明,因为它不是窗口的直接子视图,控制器和窗口之间的包装器不透明.

动画的情况几乎是一样的.步骤之间只有一些奇特的动画.

编辑2:
答案真的有点不正确. iPhone和iPad之间存在很大差异.

在iPhone上,所显示的控制器始终以全屏显示,并且呈现控制器实际上从窗口中移除.

在iPad上,如果所提供的控制器不是全屏(参见UIModalPresentationStylE),则呈现控制器停留在窗口中.

你的问题:

如果控制器是全屏的,那么这个说法是正确的.否则,呈现视图控制器停留在那里,但是整个内容与其他视图重叠(即使它们是半透明的).此外,呈现和呈现控制器视图之间总是有一些观点.

看到上一个问题的答案 – 在iPhone上,没有什么区别.

从我的测试中,只有呈现控制器才从窗口层次结构中删除.这可能是为了优化绘图性能.这是系统可以安全删除的唯一控制器.删除任何其他视图可能会导致问题(例如应始终可见的视图).

编辑:
如果要制作透明控制器,可以:

>使用转换动画([UIView transition …])将视图直接添加到视图层次结构(与控制器的视图或窗口)>同样的,但也添加一个子控制器到您的控制器.

大佬总结

以上是大佬教程为你收集整理的iphone – 当我们执行presentViewController时会发生什么事情?全部内容,希望文章能够帮你解决iphone – 当我们执行presentViewController时会发生什么事情?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。