这个问题参考了 DanielGindi/Charts,但我认为即使您不熟悉
NSView
库,一些 Charts
渲染的知识也可能有所帮助。
我在 MacOS 项目中使用
Charts
,但无法正确显示 MarkerView
。我已经将 RadarMarkerView
从 ChartsDemo-iOS 项目复制到 ChartsDemo-macOS 以便在 MacOS RadarDemoViewController
中使用它。但是当我点击图表中的值时,标记从未出现在视图中。
这里是
RadarMarkerViewMac
的完整实现:
public class RadarMarkerViewMac: MarkerView {
@IBOutlet var label: NSTextField!
public override func awakeFromNib() {
self.offset.x = -self.frame.size.width / 2.0
self.offset.y = -self.frame.size.height - 7.0
}
public override func refreshContent(entry: ChartDataEntry, highlight: Highlight) {
label.stringValue = String.init(format: "%.3f %%", (entry.y))
_ = self // see note 2
layout() // see note 1
}
}
如果您查看原始的 RadarMarkerView,就会看到只有两个显着变化:
layoutIfNeeded()
更改为 layout()
因为前一个函数在 NSView
中不存在。self
是否被正确绘制(当断点暂停时,将鼠标悬停在self
上,然后单击眼球按钮以查看视图)。我发现的奇怪的事情是:点击图表突出显示所选值但不显示标记。但是,当我在
layout()
行上放置断点,然后使用预览弹出窗口查看 self
时,我看到的视图很好......然后一旦我继续运行应用程序,标记就会出现在所有后续选择中的图表,即使禁用了断点。
我认为还需要注意的是,如果我放置断点并且没有显示预览,则标记不会显示在图表上。
我假设这与
NSView
渲染有关,但我无法使应用程序在此处正确运行。你能帮忙吗?