gpt4 book ai didi

cocoa - 有效地子类化标准 Cocoa 控件

转载 作者:行者123 更新时间:2023-12-03 16:06:50 27 4
gpt4 key购买 nike

尽管有人机界面指南文档 (HIG),但许多高质量的 Mac 桌面应用程序使用自定义控件。我的问题是为 Cocoa 开发开始子类化控件的最佳方法是什么?令我惊讶的是,关于这个主题的(好的)信息如此之少。哪条路最好走,这样你就不会得到一个很好但半坏的控制?

最佳答案

这是一个 list :

  • 确保您的控件在双分辨率下正常工作。使用 Quartz Debug 对此进行测试。您需要测试绘图完整性(在所有状态下——正常、选定、按下、禁用和任何其他状态)和操作完整性( HitTest 与屏幕/其他目标设备上出现的内容相匹配)。
  • 额外的功劳,请确保您的控件在 1.5(或其他类似的非整数)分辨率下正常工作。
  • 测试单击时标准控件的工作方式。无论如何,你可能会这样做。像标准控件那样做。
  • 测试半点击时标准控件的工作方式(鼠标在里面,鼠标在外面)。
  • 测试标准控件在点击黑暗面时的工作方式(鼠标在外面,鼠标在里面)。
  • 测试标准控件在拖入时如何工作。
  • 使用其他鼠标按钮(右侧和中间)测试以上四个。
  • 测试当您使用滚轮滚动时标准控件的作用。还要测试 shift + scroll,并在具有它们的鼠标(例如,大多数 Logitech 鼠标)上向左/向右滚动按钮。
  • 测试当您在每个轴和两个轴上用两个手指滚动时标准控件的作用。
  • 测试当您捏合和松开时标准控件的作用。
  • 测试当您在每个轴上用三个和四个手指滑动时标准控件的作用。
  • 测试标准控件如何在“全键盘访问”打开的情况下工作。你能插进去吗?你可以用空格键按下它吗?你能用回车键输入吗?你能去掉吗?
  • 测试标准控件如何响应辅助功能查询。使用辅助功能检查器。见 Accessibility Programming Guidelines for Cocoa有关在您的控件中响应辅助功能查询和消息的信息。
  • 在 VoiceOver 中测试您的应用程序(包括但不限于您的自定义控件)。蒙住自己的眼睛并尝试单独使用 VoiceOver 来使用该应用程序。
  • 如果适用,请测试打印您的 View 。如果您不想为您的开发过程杀死一棵树,您可以打印到预览。
  • 测试其他纸张尺寸的打印。如果您在美国,请测试 A4;否则,测试 US Letter。如果您感觉彻底,请测试其他纸张尺寸(例如 Legal 和 A3)。
  • 如果您正在实现滚动条 ( poor you ),请测试您的滚动条是否正确响应“系统偏好设置”的“外观” Pane 中的“跳转到(下一页|点击的位置)”偏好设置。 “正确”意味着它应该做用户选择的事情。
  • 确保它正确实现了所有四个滚动箭头位置设置:One at each end (Mac style), both at the lower/left end (NeXT style), both at the upper/right end, and both at each end (power user style).与往常一样,您需要正确绘制和正确 HitTest / react 。 (建议 by @radiofreelunch/by David Dunham )
  • 此外,如果您正在实现滚动条,请确保它正确响应“平滑滚动”首选项。
  • 测试它是否正确响应不同的滚动速度首选项。
  • 如果您正在实现某种类型的文本输入字段,或者任何响应某种特殊热键的 View (例如 Enter 以在输入行中发送消息),请测试从右到左(希伯来语/阿拉伯语)文本输入和替代输入法。 Character Viewer 是一个好的开始。
  • 另外,测试你没有打破 ctrl-q。例如,ctrl-q,tab 应该总是输入一个制表符。选项 +(键)通常也是如此,例如输入行中的选项返回。
  • 测试它是否正确响应不同的键重复首选项。
  • 如果您通过 Cocoa 的标准菜单快捷键处理以外的方式实现任何自定义键盘快捷键(⌘ + 零个或多个其他修饰符 + 一个或多个字符键),请在 Dvorak 下测试您的自定义快捷键行为。没有比通过退出来响应 ⌘' 更快的方式来破坏我们对您的应用程序的看法。
  • 向从未使用过或看过任何模型的用户展示您的应用。取消程序员的资格。如果他们不承认您的控件(无论它应该是什么),请重新设计它。如果你曾经说过“滚动条在这里”或“你需要点击它”,你会立即失败。
  • 当您的应用程序在后台时,测试您的控件是否响应(或不响应,如果响应会很危险)。 ( Suggested by @chucker. )
  • 测试当您的应用程序处于后台并且用户按下 ⌘ 键单击它时,您的控件是否有响应,但不会使应用程序前进。 ( Suggested by @chucker. )
  • 测试调整 View 大小。除此之外,这将确保您正确设置自动调整大小掩码。您还在寻找绘图错误——扭曲的元素、间隙等。(这是 suggested by @Bagelturf 的一部分。)
  • 如果您的控件实际上是一个控件,请将其发送 sizeToFit并确保它做正确的事情。 ( Suggested by @Bagelturf. )
  • 如果您使用鼠标坐标,不要假设它们是整数。确保正确处理小数、零(正和负)和负数。 (此 suggested by @Bagelturf 的一部分。)
  • 您还可以考虑将控件拆分为一个控件和一个单元格。在后一种情况下,还要对嵌入在 NSMatrix 和 NSTableColumn 中的单元格执行所有这些测试。
  • 如果您的控件有菜单,请测试当控件位于屏幕的一个或多个边缘时会发生什么。菜单应该移动到不超出屏幕空间。
  • 如果您的控件有菜单,请测试用户在使用“全键盘访问”时是否可以使用向下箭头键进入菜单。如果它也是一个文本字段(如组合框),请测试这仅在用户按下文本末尾的向下箭头时发生;否则,正常的文本字段行为应该规则:按下不是最后一行的行应该将光标向下移动一行,按下最后一行应该移动到该行的末尾。
  • 如果您的控件有菜单,请测试它在单击时保持打开状态,并且在保持打开状态时不会立即关闭。 There is a function you can use to do this correctly , 和 it is available in 64-bit .
  • 如果您的控件有菜单,请测试它是否可导航(所有四个箭头键 + Home、End、Page Up、Page Down)、可用(空格键/回车键操作)以及可通过键盘取消 (esc)。
  • 关于cocoa - 有效地子类化标准 Cocoa 控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4907017/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com