/// 背后繪制虛線的 XAxisRenderer
final class BackLineXAxisRenderer: XAxisRenderer {
? ? /// 虛線繪制的 x 值(數(shù)據(jù)坐標系)
? ? 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) {
? ? ? ? // 先讓系統(tǒng)畫原有的 grid line
? ? ? ? super.renderGridLines(context: context)
? ? ? ? guard
? ? ? ? ? ? letdashedX,
? ? ? ? ? ? lettransformer
? ? ? ? else{return}
? ? ? ? // 數(shù)據(jù)坐標 -> 像素坐標
? ? ? ? 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()
? ? }
}