【问题标题】:Bi-directional NSLevelIndicator (origin at center of indicator) - how?双向 NSLevelIndicator(指标中心的原点) - 如何?
【发布时间】:2014-04-21 10:37:56
【问题描述】:

我需要一个有符号的“错误”的图形指示,即 0 是完美的,-1.0 在一个方向上是完全错误的,0.3 是部分正确的,但向右倾斜,1.0 在另一个方向上是完全错误的。有点像电压表。

我已经搜索和搜索,我找到的最接近的是这个帖子:Bi-directional level indicator,但这似乎突然结束了,提出的解决方案似乎不符合发帖人(或我)的要求。

我不会画画,但我尝试在 IB 中制作一些粗略的模型来说明我的意思。外部区域的颜色会不同,最终实现中可能会有轴信息和其他内容。 (显然我不允许发布图片。我会尝试 ascii art 代替)

定位:

[....|....]

左边完全错了:

[|||||....]

右边完全错了:

[....|||||]

部分错误:

[....|||..]

现在,我想我有几个选择:

  1. 子类 NSLevelIndicator(或 NSLevelIndicatorCell) 我不介意这一点,但我不太确定该怎么做。通过在网上搜索,我找到了诸如更改样式(圆角,fx)和关键颜色反转等问题的答案,但这样的解决方案似乎意味着完全覆盖绘图功能,这意味着你失去了任何 NSLevelIndicator(Cell)正在为你做渐变和所有。我曾希望可以操纵各种变量并远离实际绘图。

  2. 创建自定义视图我没有任何图形思维,但我想从 Apple 的自定义视图指南开始:Subclassing NSView。我想尽可能多地使用标准 UI 组件,因为我确信 Apple 有比我更好的 UI 设计师。我之前做过一个自定义 2D 图形视图,我认为这还可以,但在我看来, 确实更像是一个自定义视图。

  3. 借用别人的实现(或寻找灵感)我已经搜索过但没有找到任何东西,这很奇怪,因为我认为这将是一个常见的设置。它不必像这样的 NSLevelIndicator 。它可以是电压表或类似的。

那么我应该采取哪种方法呢?如果是 1 或 3,我需要一些指导。如果 2 我想知道 Apple 文档对于像我这样的新手来说是否足够,或者我是否需要更多信息。

PS:在同一篇文章中提出多个问题可能并不明智,但可以将其视为一个奖励问题。当继承 NS* 的东西时,你怎么知道要覆盖哪些方法?据我所知,Apple 的类参考仅列出了公共方法。我所做的是创建一个子类,然后输入“self”。看看会出现什么,但这并不容易分类。

【问题讨论】:

  • 回答您的 PS 问题:您通常不应该覆盖 Cocoa 类中的非公共方法。一般来说,您在 Cocoa 中的子类化比在其他框架/语言中要少(尽管有像 NSView 这样的类被设计为子类化)。
  • 谢谢。这就说得通了。我见过的例子覆盖了drawRect、initWithFrame等。我想那不是我应该走的路。
  • 哦,显然我一直不清楚。覆盖这些方法是标准的!参见例如developer.apple.com/library/mac/documentation/cocoa/reference/…:但这是一个公共方法,它在 NSView.h 文件中声明。
  • 不,你说得很清楚。我应该意识到这些方法来自 NSView。我很高兴我把这种愚蠢作为后记。再次感谢。

标签: objective-c macos cocoa nslevelindicator


【解决方案1】:

很奇怪,也许这是最近的苹果更新。但是现在 NSLevelIndicator 至少支持负值。 因此,只需将最小值设置为 -n 并将最大值设置为 n。 0 将在中间。

【讨论】:

  • 哦,这很有趣。你能告诉我你的操作系统和 XCode 版本吗?
  • 我有 Xcode 6,刚刚升级到 Yosemite,但在升级之前它可以工作。
猜你喜欢
  • 2019-04-19
  • 2021-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-13
  • 2020-07-23
  • 1970-01-01
  • 2023-03-20
相关资源
最近更新 更多