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

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

查看其他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:

转载于:https://www.cnblogs.com/lu-diary/p/7132576.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值