gpt4 book ai didi

ios - 忍者 iOS : Pie chart spoke with value and name

转载 作者:行者123 更新时间:2023-11-29 00:18:41 27 4
gpt4 key购买 nike

我想创建带有一点自定义辐条的饼图。

我想要实现的是在辐条上方显示名称 od 数据点,在辐条下方显示值。现在我知道如何用

func sChart(_ chart: ShinobiChart, labelForSliceAt sliceIndex: Int, in series: SChartRadialSeries) -> UILabel?

并将标签行号设置为2.... enter image description here

如何在下面和上面放置一个标签?

标记

最佳答案

我已在我们的 shinobicontrols forum 回答了您的问题但我将我的答案粘贴在这里,以防有人看到这篇文章:

如果您不使用辐条,那么执行此操作的方法是使用委托(delegate)方法 sChart:alterLabel:forDatapoint:atSliceIndex:inRadialSeries: 来重新定位标签,但不幸的是目前一个问题,这意味着当显示辐条时,在定位标签之前调用此方法。

我们将尝试在 shinobicharts 的 future 版本中解决此问题,但与此同时,您可以通过创建自己的附加标签并使用 KVO 来解决此问题,如下所示:

func sChart(_ chart: ShinobiChart, labelForSliceAt sliceIndex: Int, in series: SChartRadialSeries) -> UILabel {
let pieSeries = series as! SChartPieSeries
let dp = self.sChart(chart, dataPointAt: sliceIndex, forSeriesAt: 0)
let label = UILabel()
label.text = String(format:"Slice %i", sliceIndex)
label.sizeToFit()
label.addObserver(self, forKeyPath: "frame", options: NSKeyValueObservingOptions(rawValue: 0), context: nil)
label.addObserver(self, forKeyPath: "center", options: NSKeyValueObservingOptions(rawValue: 0), context: nil)
label.layer.addObserver(self, forKeyPath: "frame", options: NSKeyValueObservingOptions(rawValue: 0), context: nil)
label.layer.addObserver(self, forKeyPath: "center", options: NSKeyValueObservingOptions(rawValue: 0), context: nil)

sliceLabels[sliceIndex] = label

let customLabel = UILabel()
customLabel.text = String(format:"Value: %.0f", dp.sChartYValue() as! Float)
customLabel.font = pieSeries.style().labelFont
customLabel.textColor = pieSeries.style().labelFontColor
customLabel.backgroundColor = pieSeries.style().labelBackgroundColor
customLabel.sizeToFit()
chart.canvas.overlay.addSubview(customLabel);
customLabels[sliceIndex] = customLabel;

return label;
}

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if let changedLabel = object as? UILabel {
for (index, label) in sliceLabels {
if let sliceLabel = label as? UILabel, sliceLabel === changedLabel {
let customLabel = customLabels[index] as! UILabel
customLabel.center = CGPoint(x: sliceLabel.center.x,
y: sliceLabel.center.y + sliceLabel.frame.size.height);
}
}
}
}

请注意,如解释的here UIKit 并不正式兼容 KVO,但该帖子中的大多数用户都同意那里建议的代码确实有效。 (您可能希望添加比我在此处添加的更多的观察者。)

对于相当长的解决方法,我深表歉意,但希望它对您有所帮助。

关于ios - 忍者 iOS : Pie chart spoke with value and name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44623276/

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