您的位置:首页 > 产品设计 > UI/UE

非主线程更新ui 子线程更新UI 系统动画消失解决 iOS

2017-07-07 15:47 746 查看
一直以来工程里都有一个奇怪的现象:所有动画会莫名消失,包括控制器之间的切换

查看其他app并没有这种现象,所以确定是我们app的问题。

网上搜了一下,是非主线程更新ui导致的。

这可愁坏我了。工程里更新ui的地方这么多,该怎么把哪些非主线程更新ui的地方挑出来呢?

最原始的方法就是一个文件一个文件的改。显然这让我这个懒癌患者接受不了啊。【思路1】

有没有可能通过runtime拦截到ui更新的方法,然后检测是否是主线程?【思路2】

额……这需要了解一些系统的知识,才疏学浅的我一下子被巨大的困难打败了。

然后死马当活马医,我决定拦截view我能想到的、找到的、拦截得到的主流更新通道,然后检测是否是主线程。【思路3】

然后我就拦截的setFrame,然后还是很挫败,我就忘记了这件事。

隔一天调试的时候在断言处停住了,我一看,哎呀妈呀这不是我昨天拦截setFrame嘛,真的有用哎,真的拦截到了非主线程更新。

事情本身没啥技术含量,但这个结果是激励人的。它给了我信心。

这样看来,就算一个一个文件改也没什么大不了嘛

接下来解决这个问题我的策略是:

一边沿着思路3前进,一边寻求更好的解决方法。更好解决方法突破点是facebook那个可以在非主线程更新UI的第三方库(是Facebook?可以非主线程更新UI?记不太清了)。

2017.8.18后记:

上面的runtime swizzle method确实解决了动画突然消失的问题。

下面附上我都把哪些方法强制切换到主线程:

UIImageView setImage:

UINavigationController pushViewController:animated

UITableView reloadData

UIView addSubview: removeFromSuperview

UILabel setText:

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #31595d }
span.s1 { }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐