UITabBar在显示和隐藏的过程中层级是变化的 。在推出控制器隐藏tabBar的时候,tabBar 是从UITabBarController的view上先移除然后加在一个临时创建的view上,然后实现从又到左的抽屉动画,动画结束并且延时几百毫秒后在加在UITabBarController的view上。退回一级页面也是一样的道理,先加在临时view上,然后从左到右动画结束 在延迟几百毫秒然后再加载在UITabBarController的view上。
下面先建一个工程,tabBarController上有 vc1 和 vc2 。 然后vc1上有个按键 推出vc3 然后再返回vc1 看tabBar的父视图的变化。
vc1 代码如下:

vc3 代码如下:

查看log 信息:

我们可以发现在推出控制器动作前后 tabBar的父视图确实发生了变化,并且它的父视图在vc3 viewdidappear 的时候x左边是负数,说明确实在左边在完成动画,而在vc3 viewdidappear 延迟1秒的log下 tabBar的父视图又回到了tabbarController 上。
总结: 苹果为了实现隐藏和出现tabBar的动画 而临时创建了一个view 用于实现动画,并且承载着tabBar 。动画结束再重新放置tabBar。 所以在这个时期在tabBarController的view上添加的view的层级肯定不是最上层(因为tabBar 在动画结束后最后加载回来)。 了解底层实现,希望对大家有所帮助。
UITabBar动画机制揭秘
本文深入探讨了UITabBar在iOS应用中显示与隐藏的动画实现机制。苹果通过创建临时视图承载tabBar,实现从右至左的抽屉动画效果,动画结束后将tabBar重新加载至UITabBarController的视图上,确保动画平滑过渡。
302

被折叠的 条评论
为什么被折叠?



