在最新的Snapchat更新中,当您“向右滑动消息”时,状态栏会以某种渐变的方式从黑色变为白色.
他们如何在不使用私有API的情况下执行此操作,或者他们是否使用私有API?
我调查了什么:
乍一看,我认为他们正在做其他人所做的事情(就像rdio目前所做的那样),通过屏幕捕获整个屏幕,然后修改/动画那个屏幕截图.
但是……您无法从该屏幕捕获方法访问或动画UIImage,因此尽管您可以移动/裁剪该屏幕截图,但您无法更改其外观.
所以…我测试了它,当状态栏处于该状态(半黑/半白)时,它仍然是LIVE,因为它不是截图,它响应充电变化/信号变化等,我不知道如果不使用私有API就不可能.
解决方法
这让我很好奇所以我玩了一下应用程序,并在越狱设备上使用Spark Inspector检查了应用程序的视图层次结构,我找到了一些东西.
你不使用截图是不正确的.您正在导航的一侧的状态栏是快照,不会更改.一分钟过后,您可以很容易地看到这一点,您正在转换的视图的新状态栏将会更改,因为它是真实的,但旧的不会因为它是快照.这使得幻觉很容易解决.
以下是高层次的情况:
>当您开始转换时,应用程序会在当前状态下拍摄状态栏的快照(很可能是实际拍摄整个UIScreen的快照并简单地从其中裁剪状态栏)并附加包含该快照的窗口到过渡视图的顶部,锚定到最终过渡位置,并由“从”视图控制器的视图屏蔽.此窗口似乎在UIWindowLevelStatusBar上方有一个windowLevel,因此它可以覆盖实际状态栏.>然后,“到”视图控制器接管实际状态栏并将其更改为“轻量级内容”状态.这提供了一个聪明的错觉,即单个状态栏会根据过渡边界更改颜色,但实际状态栏实际上始终位于快照窗口下方,并且如果不是快照窗口,则确实会在转换开始时立即可见在它的上面.