眨眼间,已经有1年没写过iOS的文章了,可能是忙于学习后台知识。最近,因为app有新需求,顺便就把聊天列表模块加入3DTouch功能。在天朝内百度了许多关于iOS UITableViewCell的3DTouch开发资料,发现存在一个通俗的问题,就是在数据源cellForRowAtIndexPath执行registerForPreviewingWithDelegate,当UITableViewCell过多且重复注册的时候,会造成耗cpu性能和滚动不流畅的后果。于是,我踩过坑,总结如下。
二话不说,上菜。
peek图和pop图:
在cellForRowAtIndexPath执行registerForPreviewingWithDelegate的缺点:
每次滑动UITableView,都会注册3DTouch预览功能。因为registerForPreviewingWithDelegate比较耗cpu性能,如果UITableViewCell视图层级多,并且屏幕上显示有多个cell,使劲滑动UITableView,细心的你会发现在xcode里,项目的cpu使用率高达40%。那么,是在哪里和在哪个时机添加registerForPreviewingWithDelegate注册功能为最合适呢。
在UITableView中注册registerForPreviewingWithDelegate的地点和时机:
因为peek和pop都是涉及关于长按手势功能,我就选择在UITableViewCell初始化的时候,contentview添加长按手势,当长按手势为开始状态的时候就回调信息给controller,进行注册功能。在CellChatList.m中,部分代码如:
然后我写了一个YHChatTouch类,主要是封装3DTouch注册功能。在YHChatTouch中,部分代码如:
在聊天列表YHChatListVC类中,调用YHChatTouch注册功能,部分代码如下:
cellForRow中注册代理touchDelegate:
代理回调:
只要你掌握了注册3DTouch的时机和位置,有效地提高滚动视图的滑动流畅性能。
详情代码,可以参考我的博文附带资源,喜欢的点个like哦: