iOS - 在UITableViewCell中添加3DTouch功能的正确姿势

  眨眼间,已经有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哦:

iOS-YHChat仿微信聊天(老司机带你入门即时通讯)

猜你喜欢

转载自blog.csdn.net/samuelandkevin/article/details/80137551