iOS解决控制器转场和返场界面卡顿的一种方法

本博介绍了在控制器转场和返场时界面发生卡顿的一种解决方法,主要思想是使用视图快照功能来提供一个静态的伪视图以提高性能.

转场和返场

转场是指从控制器A切换到控制器B中,这意味着控制器A被隐藏:

控制器A -> 控制器B

而返场是指从控制器B切换回控制器A,这意味着控制器A重新被显示:

控制器B -> 控制器A

为什么会卡顿?

如果在控制器转场或返场时需要播放复杂的转场动画或者在主线程中执行耗时操作就会造成转场或返场动作在界面上发生卡顿,示意如下:

可以发现在控制器返场时,中间发生了明显的卡顿.

其原因是返场动画复杂且在返场时执行了一些耗时操作,除了优化返场动画和耗时操作以外,我们可以有另一种解决思路:使用视图快照!

抛弃实时,拥抱静态

原理很简单:在转场或返场后显示原视图的静态快照,同时减少界面渲染操作.

视图快照操作都是一致的,至于如何减少界面渲染,这个需要由用户来实现.

为了避免多个控制器的重复代码同时又允许灵活性,我们可以采用协议扩展来完成这一功能.

协议扩展+自定义闭包

首先创建一个空的协议:

public protocol ViewControllerSnapshotTransition where Self:UIViewController {}

因为快照行为固定,所以该协议不需要任何内容.

然后我们创建它的扩展:

extension ViewControlle

你可能感兴趣的:(iOS开发小干货,iOS开发之旅)