iphone - UIScrollView 由于标签过多而导致性能问题

标签 iphone uiscrollview

我有一个相当大的 UIScrollView (contentSize 8000 x 960),带有很多小标签。

仅当您滚动到标签所属的区域时才会添加标签。因此,一开始,滚动很流畅,但随着加载的标签越来越多,性能会受到越来越大的影响。

保持滚动流畅的最佳解决方案是什么? CATiledLayer 是正确的选择吗?或者应该隐藏 View 之外的标签或类似的东西?

非常感谢您的帮助!

斯特凡

编辑: 当绘制一些对象而不是使用 View 时,我获得了巨大的性能提升;但现在,我遇到了另一个问题;如果我直接在 UIScrollView 上绘图,一切都会表现得很好。但是,如果我在 UIScrollView 上放置一个 UIView 并在其上进行绘制,性能会再次下降(两次在scrollViewDidScroll中调用 setNeedsDisplayInRect: :)。

所以层次结构:
UI窗口
UI View
UIScrollView <== 在这里绘制

工作正常。

但层次结构:
UI窗口
UI View
UIScrollView(尺寸8000x960)
UIView(大小8000 x 960)<==在此处绘制

表现不佳。

有什么想法吗?我需要上面的 UIView,因为绘图应该位于某些 UIView 之上;所以我将 UIViews 放在 ScrollView 中并在上面的 View 中绘制...

最佳答案

标签重用是可能的解决方案之一。有时它并没有多大帮助。当出现新的 UIView 时,将调用 drawRect 方法,这可能会导致动画问题。

有时,最好的解决方案是直接使用 Core Graphics 绘制标签(我的意思是文本),而不创建 UILabel 对象或其他东西。 CALayer 会提高性能,但可能不会给您带来太大帮助。

但首先你应该记住,alpha = 0或hidden = YES的 View 根本不会被绘制,所以使用它们不会有任何惩罚。也许您应该在使用 Core Graphics 之前尝试隐藏未使用的图形。

关于iphone - UIScrollView 由于标签过多而导致性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5897058/

相关文章:

ios - Swift:通过 UIView 识别滚动

ios - 我的 ScrollView 中的最后一个按钮无法注册触摸

ios - 当选择 ScrollView subview 时在 subview 位置滚动

iphone - Xcode 的 git 存储库存储在哪里?为什么在复制项目目录时会创建不同的存储库?

ios - 为什么我的 iPhone 无法从 Apple Watch 获取心率数据,但 watch 扩展可以?

ios - Apple 二进制文件被拒绝 (2.16)

ios - UIScrollview 有一个大 View ,还是 UITableview 有多个 View ?

iphone - 如何在 iPhone 中创建画廊

iphone - 如何在 iOS 中 subview Controller 方向发生变化时旋转父 View Controller

ios - 如何使用 autoLayout 创建具有水平和垂直分页功能的健壮 ScrollView?