【发布时间】:2014-04-21 10:37:56
【问题描述】:
我需要一个有符号的“错误”的图形指示,即 0 是完美的,-1.0 在一个方向上是完全错误的,0.3 是部分正确的,但向右倾斜,1.0 在另一个方向上是完全错误的。有点像电压表。
我已经搜索和搜索,我找到的最接近的是这个帖子:Bi-directional level indicator,但这似乎突然结束了,提出的解决方案似乎不符合发帖人(或我)的要求。
我不会画画,但我尝试在 IB 中制作一些粗略的模型来说明我的意思。外部区域的颜色会不同,最终实现中可能会有轴信息和其他内容。 (显然我不允许发布图片。我会尝试 ascii art 代替)
定位:
[....|....]
左边完全错了:
[|||||....]
右边完全错了:
[....|||||]
部分错误:
[....|||..]
现在,我想我有几个选择:
子类 NSLevelIndicator(或 NSLevelIndicatorCell) 我不介意这一点,但我不太确定该怎么做。通过在网上搜索,我找到了诸如更改样式(圆角,fx)和关键颜色反转等问题的答案,但这样的解决方案似乎意味着完全覆盖绘图功能,这意味着你失去了任何 NSLevelIndicator(Cell)正在为你做渐变和所有。我曾希望可以操纵各种变量并远离实际绘图。
创建自定义视图我没有任何图形思维,但我想从 Apple 的自定义视图指南开始:Subclassing NSView。我想尽可能多地使用标准 UI 组件,因为我确信 Apple 有比我更好的 UI 设计师。我之前做过一个自定义 2D 图形视图,我认为这还可以,但在我看来, 确实更像是一个自定义视图。
借用别人的实现(或寻找灵感)我已经搜索过但没有找到任何东西,这很奇怪,因为我认为这将是一个常见的设置。它不必像这样的 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