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

本文探讨了在UITableView中实现3DTouch功能时常见的性能问题,并提供了一种优化方案,即在UITableViewCell初始化时而非cellForRowAtIndexPath中注册预览功能,以减少CPU消耗并提升滚动流畅度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  眨眼间,已经有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仿微信聊天(老司机带你入门即时通讯)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值