在最新的 Snapchat 更新中,当您“向右滑动查看消息”时,状态栏会以渐变方式从黑色变为白色。
https://i.stack.imgur.com/4OlRg.jpg https://i.stack.imgur.com/4OlRg.jpg
他们如何在不使用私有 API 的情况下做到这一点,或者他们正在使用私有 API?
我调查过的内容:
乍一看,我认为他们只是在做其他人所做的事情(就像广播目前所做的那样),通过屏幕捕获整个屏幕,然后修改/动画该屏幕截图。
但是...您无法从该屏幕捕获方法访问 UIImage 或对其进行动画处理,因此尽管您可以移动/裁剪该屏幕截图,但您无法更改其外观。
所以...我测试了它,当状态栏处于该状态(半黑/半白)时,它仍然处于活动状态,因为它不是屏幕截图,并且它响应充电变化/信号变化等,只要我可以说,如果不使用私有 API,这是不可能的。
这让我很好奇,所以我玩了一下这个应用程序,并在越狱设备上使用 Spark Inspector 检查了应用程序的视图层次结构,我发现了一些东西。
您关于他们不使用屏幕截图的说法是错误的。您离开一侧的状态栏是快照,不会改变。一分钟过去后,您可以轻松地看到这一点,您要转换到的视图的新状态栏将会发生变化,因为它是真实的,但旧状态栏不会变化,因为它是快照。这使得幻觉很容易实现。
以下是高层正在发生的事情:
当您开始转换时,应用程序会拍摄状态栏的快照(很可能它实际上拍摄了整个状态栏的快照)UIScreen
并简单地将状态栏裁剪出来)在其当前状态下,并将包含该快照的窗口附加到转换中视图的顶部,锚定到最终转换位置并由“来自”视图控制器的视图屏蔽。这个窗口似乎有一个windowLevel
above UIWindowLevelStatusBar
所以它能够覆盖真实的状态栏。
然后,“to”视图控制器接管实际状态栏并将其更改为“浅内容”状态。这呈现出一种巧妙的错觉,即单个状态栏随过渡边框改变颜色,但真正的状态栏实际上始终位于快照窗口下方,并且如果不是快照窗口位于过渡开始时,它确实会立即可见在它的上面。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)