iPhone:在UIScrollview中处理400 UILabels的最佳方式

时间:2012-04-17 20:27:54

标签: iphone graphics uiscrollview uilabel lag

我已经在填字游戏应用程序上工作了一段时间。实际游戏在UIScrollview中运行,因为播放器应该能够滚动,缩放和平移。

在UIScrollview中,我添加了一个UITapGestureRecognizer来处理触摸事件,并计算玩家触摸的位置。到目前为止一切都很好。

之后我向UIScrollview添加了大约400张UILabels。他们每个人都是空的"直到玩家按下键盘上的按钮。我的问题是,当我添加这些标签时,整个UIScrollview在滚动等方面变得非常缓慢和滞后。

当用户猜到正确的单词时,绿色瓷砖将变得可见。磁贴作为UIImageViews加载。这再次降低了性能。

我看过DTGridView,但我没有运气。

你能帮助我,并试着指导我正确的方向吗?

3 个答案:

答案 0 :(得分:1)

我认为你应该自己实现UIScrollview方法drawRect,而不是在其中添加400 UILabel

你可以设置一个NSArray包含400个名为“label”的对象;

当用户按下按钮时,你应该计算位置&测试“标签”&决定哪个“标签”应该在当前偏移的滚动视图中显示。

在一个UIScrollview中添加400个UILabel可能会导致内存问题;

答案 1 :(得分:0)

您需要在滚动视图中使用回收标签。这将改善性能。要了解如何在UIScrollView中重复使用/回收子视图,请在UIScrollView上查看Apple WWDC视频。 WWDC 2010 Sample Code。还要检查UIScrollView类参考UIScrollView Class Reference

您可以通过此链接获取帮助Creating Circular and Infinite UIScrollViews

答案 2 :(得分:0)

我过去一直在玩这个/偶数天。使用各种相关答案。但最终我使用乐器和一些评论来看看什么是缓慢的。

我记得当你添加子视图时有人说layoutSubviews会减慢速度,所以我从那里拿出了我的“本地”代码。但没有加速。

因此,在我的addSubview例程中使用断点时,我注意到在viewDidLoad期间iOS系统实际上是在superview的布局调用(navigationCtrlr)中。

我在添加子视图和bam之前引入了0.1秒的延迟!我建议使用dispatch_async来防止因竞争条件而崩溃,但这是另一个主题。

简而言之,即使你不认为自己在那里,它也可能出现在LayoutSubviews中。