• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 尝试使用自定义布局使屏幕外 UICollectionViewCells 预渲染

[复制链接]
菜鸟教程小白 发表于 2022-12-12 19:03:54 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有一个分页的 UICollectionView,每页有一个单元格。但是,我的 UICollectionViewCells 渲染速度很慢(第三方库,没有选项)。所以作为优化,我需要预先渲染当前页面左右两边的单元格,这样滚动很流畅。

我所做的是,在我的自定义 UICollectionViewLayout 中,在检查应该返回哪些单元格的 UICollectionViewLayoutAttributes 之前,将传递的 rect 偏移 1 点,请参见此处:

- (NSArray *)layoutAttributesForElementsInRectCGRect)rect {
    CGRect outsetRect = CGRectInset(rect, -1, 0);
    return [_myAttributes filter:^BOOL(UICollectionViewLayoutAttributes *attribs) {
        return CGRectIntersectsRect(attribs.frame, outsetRect);
    }];
}

这按预期工作。然而,当实际的 UICollectionView 做它的事情时,它似乎忽略了屏幕外的单元格,并且只为第一个单元格调用 cellForItemAtIndexPath,而不是右侧(或左侧)的单元格。

有什么想法吗?谢谢



Best Answer-推荐答案


为了将来引用,我通过以下方式解决了这个问题:

  • 使用于预渲染的单元格在屏幕上强制移动一点,但大小相同。
  • 将其 z-index 更改为 -1,使其位于主页单元格下方。
  • 在 layoutAttributesForElementsInRect 中,检查矩形是否为两页宽,如果是则在页面之间滚动,所以不要抓取任何多余的页面
  • 在我的单元格的 applyLayoutAttributes 中,我检查 z-index 是否<0,如果是,那么这是一个预渲染单元格。

干杯

关于ios - 尝试使用自定义布局使屏幕外 UICollectionViewCells 预渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21899945/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap