美文网首页
DGCharts barView GradientColor

DGCharts barView GradientColor

作者: 焦下客 | 来源:发表于2024-06-07 21:21 被阅读0次
import UIKit
import DGCharts

class GradientBarChartRenderer: BarChartRenderer {
    
    override func drawDataSet(context: CGContext, dataSet: BarChartDataSetProtocol, index: Int) {
                 guard let dataProvider = dataProvider else { return }
           let transformer = dataProvider.getTransformer(forAxis: dataSet.axisDependency)
        
        let phaseY = animator.phaseY
        
        // Determine bar width
        let entryCount = dataSet.entryCount
        let barWidth: CGFloat
        
        if entryCount <= 5 {
            let totalSpace = viewPortHandler.contentWidth / CGFloat(entryCount + 2) // Leave one space for padding
            barWidth = 36.0 / totalSpace
        } else {
            barWidth = 0.67//CGFloat(dataProvider.barData?.barWidth ?? 0.85)
        }
        
        dataProvider.barData?.barWidth = Double(barWidth)
        
        // Prepare the buffer
        var buffer = [CGRect](repeating: CGRect(), count: entryCount)
        
        for i in 0 ..< entryCount {
            guard let e = dataSet.entryForIndex(i) as? BarChartDataEntry else { continue }
            
            let left = e.x - barWidth / 2.0
            let right = e.x + barWidth / 2.0
            let top = e.y * Double(phaseY)
            let bottom = 0.0
            
            buffer[i] = CGRect(x: left, y: bottom, width: right - left, height: top)
        }
        
        transformer.rectValuesToPixel(&buffer)
        
        // Draw the bars
        for i in 0 ..< buffer.count {
            context.saveGState()
            
            let gradientColors = [ChartColorTemplates.colorFromString("#ff0000").cgColor,
                                  ChartColorTemplates.colorFromString("#00ff00").cgColor] as CFArray
            let colorLocations:[CGFloat] = [0.0, 1.0]
            let gradient = CGGradient(colorsSpace: CGColorSpaceCreateDeviceRGB(), colors: gradientColors, locations: colorLocations)
            
            if let gradient = gradient {
                context.clip(to: buffer[i])
                context.drawLinearGradient(gradient, start: CGPoint(x: buffer[i].minX, y: buffer[i].minY), end: CGPoint(x: buffer[i].minX, y: buffer[i].maxY), options: [])
            }
            
            context.restoreGState()
        }
}

相关文章

网友评论

      本文标题:DGCharts barView GradientColor

      本文链接:https://www.haomeiwen.com/subject/rtqvqjtx.html