IOS UIViewController如何透明 与安卓的Activiy的区别,新手学习

来源:互联网 发布:淘宝网运动器材 编辑:程序博客网 时间:2024/06/11 02:25

先贴打开透明UIViewController代码

            var vc = DetailViewController();            vc.modalPresentationStyle = .Custom            self.presentViewController(vc, animated: true, completion: nil)

我的个人理解

        在这里,先说一下安卓的打开页面方式        startActivity(intent);        startActivityForResult(intent, requestCode);        会安卓的都知道 startActivity是Context的函数,而startActivityForResult是        Activity的函数        在IOS中,类似    startActivity的打开方式presentViewController        Activity 可以理解为 UIViewController        而要打开一个透明的Activity,我们在安卓中,只要配置window的背影色为透明色,就可了.        而在IOS中,设置背影透明色,是不可行的        这里先说,为什么不行.IOS每打开一个UIViewController会对应一个UITransitionView 就        是所谓的UIViewController的最底层的一个View.当然,它也是一个画布画出来的View而已        首先:UIVindow是每一个IOS的项目的最底层的一个容器        而每次打开一个UIViewController,会在UIVindow添加一个UIViewController        层次关系是这样的        UIVindow            UITransitionView            UITransitionView            UITransitionView        注:重点在这里,永远只有一个  UIVindow,每打开一个UIViewController,就会添加一个        UITransitionView        在每个UITransitionView中都存在一个UIView,这个,就是在UIViewController中的        self.view 这个如果不搞清楚,层级关系乱掉了,页面会麻烦的.        我们想做到的透明,就是把UITransitionView给透明掉.这个思路,本身是没有错的,但是        UITransitionView透明之后呢?你想看到的是上一个页面的UITransitionView,就是上个页        面的self.view的内容.        不管怎么做,都做不到透明看到上个页面的东西.        IOS的机制是这样设定的,你要打开一个页面,要声明,这个页面是不是透明的,如果你不设置.默认        是不透明的,在你打开一个新的UITransitionView的时候,你只能看到在这个页面的所包含的        view,而上个页面的UITransitionView中的view都是被隐藏的,所以,你只能看到一个黑色的        背影,这个黑色,就是UIVindow的背影色了        默认的结果是这样的:        UIVindow            UITransitionView(上上页)            UITransitionView(上页)            UITransitionView(当前的页)                UIView(即self.view)        所以,不设置打开模式为透明,是做不到透明的.        打开默认的设置是这样的:        modalPresentationStyle = .Custom        modalPresentationStyle是UIViewController的函数.        只要声明,打开为此模式,就好了.这个时候,页面结构是这样的        UIVindow            UITransitionView(上上页)            UITransitionView(上页)                UIView(即self.view)            UITransitionView(当前的页)                UIView(即self.view)        这样,就可以看到上个页面的self.view了,就达到了透明的效果了              打开透明的代码如下:        var vc = DetailViewController();        vc.modalPresentationStyle = .Custom        self.presentViewController(vc, animated: true, completion: nil)       注:如果加打开动画,即UIViewControllerAnimatedTransitioning这种打开动画的转场模       式,在这里的添加View的时候,进行处理,就OK了.
0 0
原创粉丝点击