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

先贴打开透明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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值