iOS DGCharts 柱状图BarChart虚线

2025-12-18  本文已影响0人  木头炫

/// 背后绘制虚线的 XAxisRenderer

final class BackLineXAxisRenderer: XAxisRenderer {

    /// 虚线绘制的 x 值(数据坐标系)

    vardashedX:Double?

    /// 起点 Y 偏移(像素)

    var startYOffset: CGFloat = -30

    ///虚线颜色

    vardashColor:UIColor= .lightGray

    ///虚线宽度

    var dashLineWidth: CGFloat = 1.5

    /// 虚线样式(等价 Android 的[10f, 10f])

    vardashPattern: [CGFloat] = [3,3]

    //MARK: - Init

    override init(

        viewPortHandler: ViewPortHandler,

        axis:XAxis,

        transformer:Transformer?

    ) {

        super.init(

            viewPortHandler: viewPortHandler,

            axis: axis,

            transformer: transformer

        )

    }

    //MARK: - Render

    override func renderGridLines(context: CGContext) {

        // 先让系统画原有的 grid line

        super.renderGridLines(context: context)

        guard

            letdashedX,

            lettransformer

        else{return}

        // 数据坐标 -> 像素坐标

        varposition =CGPoint(x: dashedX,y:0)

        transformer.pointValueToPixel(&position)

        context.saveGState()

        defer{ context.restoreGState() }

        context.setStrokeColor(dashColor.cgColor)

        context.setLineWidth(dashLineWidth)

        context.setLineDash(phase:0,lengths:dashPattern)

        let top = viewPortHandler.contentTop + startYOffset

        let bottom = viewPortHandler.contentBottom

        context.move(to:CGPoint(x: position.x,y: top))

        context.addLine(to:CGPoint(x: position.x,y: bottom))

        context.strokePath()

    }

}

上一篇 下一篇

猜你喜欢

热点阅读