QMUI_iOS icon indicating copy to clipboard operation
QMUI_iOS copied to clipboard

imagePreviewView:renderZoomImageView:atIndex 回调

Open pinksunHenry opened this issue 6 years ago • 3 comments

请填写运行环境

  • [x] 设备:iphoneXS MAX
  • [x] 系统:iOS 12.1.4
  • [x] Xcode 版本:10.2
  • [x] QMUI iOS 版本:3.1.2

请描述具体问题

使用QMUIImagePreviewViewController进行多张图片预览,这只代理,实现代理require方法中有一个imagePreviewView:renderZoomImageView:atIndex 方法,该方法会出现下面问题 1.第一次回调 就是控制器呈现之后 会调用2次 ,index相同。 2.当从第一次点击的index向右滑动 翻下一张 则分别回调下一张的index和下下一张的index 3.向前滑动, 会出现index 不准确 ,例如从第四张向前滑动一次,滑动前index为4(实际上应该为3),滑动后index为1。当从第二张滑动到第一张,不会回调该方法。 这个是就这样设计的还是?

相关截图(断点的堆栈、控制台的 log)

pinksunHenry avatar May 13 '19 08:05 pinksunHenry

预览控件本质是个 UICollectionView,而 imagePreviewView:renderZoomImageView:atIndex: 方法的调用本质上是 collectionView:cellForItemAtIndexPath: 的调用,没有特地去干预它的顺序和时机。reusable view 的这些方法理论上都可以随时被触发,建议在编码时考虑到这一点。

目前是有什么业务场景会因此而产生问题吗?

MoLice avatar May 15 '19 11:05 MoLice

但是在实际使用中,并不是cell出现的时候调用就像上面我描述的问题一样。建议你们可以在该方法打印一下index。第一次出现会调用两次同样的值,向右滑动第二次值不正确,像左滑动值不正确。 我是在该方法内异步加载网络图片的时候可能出现翻的同一张照片建立多次请求,导致进度不正确,如果我在请求之前移除所有请求的话,则因为index不正确导致不能加载正在浏览index对应的图片。

pinksunHenry avatar May 15 '19 13:05 pinksunHenry

嗯,我的意思是你说的 index 的问题确实存在,也确实如你所说的。而这个不符合预期的行为是 UICollectionView 本身的行为,不是我们的主动控制,如果要优化这一点,可能要重构一下这个组件,排期应该不会很快。

至于你说的网络请求的问题,建议在发起请求前检查之前是否已经发起过相同的请求,如果有,则屏蔽掉新的请求,保证同一张图片只请求一次,这个策略在我们的业务项目中也已使用很长一段时间,目前没发现不符合预期的情况出现,你可以参考一下。

MoLice avatar May 20 '19 08:05 MoLice