2

我一直在研究填字游戏应用程序一段时间。实际游戏在 UIScrollview 中运行,因为玩家应该能够滚动、缩放和平移。

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

之后,我在 UIScrollview 中添加了大约 400 个 UILabel。在玩家按下键盘上的按钮之前,它们中的每一个都是“空的”。我的问题是,当我添加这些标签时,整个 UIScrollview 在滚动等方面变得非常缓慢和滞后。

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

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

你能帮助我并尝试引导我朝着正确的方向前进吗?

4

3 回答 3

1

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

你可以设置一个包含 400 个对象的 NSArray,称为“标签”;

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

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

于 2012-04-18T02:36:06.887 回答
0

您需要在滚动视图中使用回收标签。这将提高性能。要了解如何在 UIScrollView 中重用/回收子视图,请查看 UIScrollView 上的 Apple WWDC 视频。WWDC 2010 示例代码。还要检查 UIScrollView类参考 UIScrollView 类参考

您可以从此链接获得帮助Creating Circular and Infinite UIScrollViews

于 2012-04-18T06:29:40.680 回答
0

在过去的一段时间/几天里,我一直在玩这个。使用各种相关的答案。但最终我使用了工具和一些评论来看看什么是慢的。

我记得有人说layoutSubviews 在你添加Subviews 时会减慢速度,所以我把我的“本地”代码去掉了。但没有任何进展。

因此,当在我的 addSubview 例程中使用断点时,我注意到 iOS 系统实际上在 viewDidLoad 期间处于超级视图的布局调用 (navigationCtrlr) 中。

在添加子视图和 bam 之前,我引入了 0.1 秒的延迟!我推荐 dispatch_async 以防止由于竞争条件而崩溃,但这是另一个主题。

简而言之,即使您认为自己不存在,它也可能在 LayoutSubviews 中。

于 2016-08-09T01:18:59.827 回答