首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在iOS-图表中添加最大值和最小值的箭头?

如何在iOS-图表中添加最大值和最小值的箭头?
EN

Stack Overflow用户
提问于 2018-03-20 10:36:35
回答 1查看 287关注 0票数 1

我想显示最大和最小值的箭头,就像下面的图片一样。

有没有人对如何使用iOS-图表来实现它有想法?非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-29 08:18:58

您需要为CandleStickChartView编写自己的自定义呈现程序。幸运的是,在您的情况下,您只需要覆盖一个方法。

因此,从CandleStickChartRenderer继承类并重写方法drawValues(context: CGContext)。您只需从父方法复制/粘贴大部分代码,并且只进行必要的更改。

代码语言:javascript
运行
复制
class MyCandleStickChartRenderer: CandleStickChartRenderer {

    internal var _xBounds = XBounds()

    var minValue: Double
    var maxValue: Double

    init (view: CandleStickChartView, minValue: Double, maxValue: Double) {
        self.minValue = minValue
        self.maxValue = maxValue

        super.init(dataProvider: view, animator: view.chartAnimator, viewPortHandler: view.viewPortHandler)
    }

    override func drawValues(context: CGContext)
    {
        // ... I remove some code that was not changed ...

            for j in stride(from: _xBounds.min, through: _xBounds.range + _xBounds.min, by: 1)
            {
                guard let e = dataSet.entryForIndex(j) as? CandleChartDataEntry else { break }

                // need to show only min and max values
                guard e.high == maxValue || e.low == minValue else { continue }

                pt.x = CGFloat(e.x)
                if e.high == maxValue {
                    pt.y = CGFloat(e.high * phaseY)
                } else if e.low == minValue {
                    pt.y = CGFloat(e.low * phaseY)
                }
                pt = pt.applying(valueToPixelMatrix)

                // ... I remove some code that was not changed ...   

                if dataSet.isDrawValuesEnabled
                {
                    var textValue: String?
                    var align: NSTextAlignment = .center

                    // customize position for min/max value 
                    if e.high == maxValue {
                        pt.y -= yOffset
                        textValue = "←  " + String(maxValue)
                        align = .left
                    } else if e.low == minValue {
                        pt.y += yOffset / 5
                        textValue = String(minValue) + "  →"
                        align = .right
                    }

                    if let textValue = textValue {
                        ChartUtils.drawText(
                            context: context,
                            text: textValue,
                            point: CGPoint(
                                x: pt.x,
                                y: pt.y ),
                            align: align,
                            attributes: [NSAttributedStringKey.font: valueFont, NSAttributedStringKey.foregroundColor: dataSet.valueTextColorAt(j)])
                    }
                }
            }
        }
    }
}

此外,您还需要创建呈现器的实例,并将其设置为图表视图中的属性。

代码语言:javascript
运行
复制
myCandleStickChartView.renderer = MyCandleStickChartRenderer(view: candleStickChartView, minValue: 400, maxValue: 1450)

最后..。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49381948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档