iphone - UI 设计 - 处理许多 UIButton 的最佳方式

标签 iphone performance uibutton

在处理界面中的大量 UIButton 时,我遇到了问题。我想知道是否有人有这方面的第一手经验以及他们是如何做到的?

当处理 30-80 个最简单的按钮时,如果有几个复杂的按钮,您是否只使用 UIButton 还是做一些不同的事情,例如绘制矩形,响应触摸事件并获取触摸事件的坐标?

最好的例子是日历,类似于苹果的日历应用程序。您是否会大部分时间使用drawRect进行绘制,然后当您单击按钮时将其替换为图像或仅使用UIButtons?这并不是内存占用或创建按钮的问题,只是它们有时会发生奇怪的事情(关于它的上一个问题)并且在动画时出现性能问题。

感谢您的帮助。

最佳答案

如果您的按钮“发生了奇怪的事情”,您需要弄清楚原因。仅仅为了避免您不理解的问题(并且可能再次出现)而切换架构听起来并不是一个好主意。

-drawRect: 通过绘制位图支持的上下文来工作。当在 -setNeedsDisplay 之后调用 -displayIfNeeded (或执行其他隐式设置 needDisplay 标志的操作,例如使用 contentMode = UIContentModeRedraw 调整 View 大小)时,会发生这种情况。然后将位图支持的上下文合成到屏幕上。

按钮的工作原理是将不同的组件(背景图像、前景图像、文本)放在不同的层中。文本发生变化时被绘制并合成到屏幕上;图像直接合成到屏幕上。

“最好”的做事方式通常是两者的结合。例如,您可以在 -drawRect: 中绘制文本和背景图像,因此不需要在渲染时合成不同的图层(如果您的 View “不透明”,您将获得额外的加速)。您可能希望避免通过 drawRect:(并且它不会与 CoreAnimation 集成得很好)来避免全屏动画,因为绘图往往比合成更昂贵。

但首先,我会找出 UIButton 出了什么问题。在您真正找出慢速部分之前,担心如何使事情变得更快是没有意义的。编写代码以便于维护。 UIButton 并没有那么昂贵, -drawRect: 也没有那么糟糕(如果您使用 -setNeedsDisplayInRect: 对于一个较小的矩形,可能会更好,但随后你需要计算矩形...),但如果你想要一个按钮,请使用 UIButton。

关于iphone - UI 设计 - 处理许多 UIButton 的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3927536/

相关文章:

iphone - 通过网站分发 iPad 应用程序(.ipa 格式文件)

iphone - 从字符串 '2011-08-16T19:03:21.000Z' 获取日期

performance - 分析嵌套for循环的运行时间

swift - 将自定义参数传递给 uibutton #selector swift 3

ios - 在 UITableViewCell 中模糊图像时出现性能问题

mysql - 如何避免sql查询中的临时表?

sql - 索引可用时进行全表扫描

ios - VoiceOver 将 UITableViewCell 中的 UIButton 读取为 "dimmed"

swift - 从自定义原型(prototype)单元格中的 UIButton PrepareForSegue

java - iPad/iPhone 上的 HTTP 字节范围协议(protocol)客户端行为