【问题标题】:Memory/performance trading question? [closed]内存/性能交易问题? [关闭]
【发布时间】:2011-09-14 14:24:56
【问题描述】:

什么是最好的?

我想处理大约 400 个按钮(按钮有 4 个状态)。 哪个最好?为每个按钮存储/显示 4 个不同的 OPAQUE 图像,或者从 2 个 ALPHA MASKED png 中组合状态?

我知道这个问题有点模糊。 更多不透明图像,还是更少但 ALPHA MASKED?

如果有经验,请分享。

【问题讨论】:

  • 嗯,您实际上是在尝试同时显示 400 个按钮?这将使每个按钮最大。 sqrt((320 * 480) / 400) = 20x20。不要认为这真的有道理,不是吗?
  • :) 分页滚动。一次只能看到 12 个按钮。

标签: iphone button png alpha


【解决方案1】:

正如我之前提到的,我真的认为这不是一个好主意(从用户体验的角度来看)。但是,如果您确实想这样做,您应该稍微“破解”一下以提高性能。

而不是使用 400(甚至 400 * 4 = 1600UIViews(或 UIButtons,在这种情况下基本相同),您应该坚持使用一个子类 UIView 并覆盖 @987654325 @ 方法用于更快和缓存的绘图。

您可以覆盖touchesBegan ...touchesMoved ...等事件来跟踪触摸事件。当用户按下一个“按钮”时(实际上,它在您的单个视图中按下,但您可以测量它应该是什么按钮),您更新单个 int-variable 并调用 setNeedsDisplay 以重绘“按钮” '。

【讨论】:

  • 非常感谢您的回答。当然,一次只会加载 12 * 3 个按钮。其余的将在滚动事件上延迟加载。我正在使用自定义状态访问器实现 drawRect 方法,希望它足够快。我计划在初始化时创建 CGlayers,然后在状态更改时重新绘制它们。再次感谢您的建议。
  • 我建议只创建 12 个按钮,并在必要时简单地修改它们的标签。
【解决方案2】:

这取决于您将在何处使用它们。如果我们谈论的是静态位置 - 使用 alpha masked。在表格(和任何启用滚动的视图)上,您需要先检查性能。

【讨论】:

  • 是的,它们将被滚动。我将在下面使用 Tim 的方法。谢谢你的建议。
  • 顺便说一句,为了我的目的,我发现使用子视图使滚动比绘制单元格更平滑(我认为单元格上有大约 7 个子视图。其中 4 个按钮。我实际上必须再加上,我的单​​元格相当大,高度不同 - 在 120 到 300 像素之间。)
猜你喜欢
  • 2017-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多