You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否用Daniel Gindi iOS Stacked Lines Charts实现带蓝色斜纹填充的图表?

关于实现带斜纹填充区域图表的方案

一、使用Daniel Gindi的iOS Charts库实现

这个库支持实现斜纹填充区域,核心是通过自定义图案填充(PatternFill)来实现蓝色斜纹效果,步骤如下:

  • 创建斜纹图案的CGPattern:通过Core Graphics绘制重复的斜线,定义图案的大小、间距等参数
  • 将CGPattern包装为PatternFill对象
  • 给对应的LineChartDataSet设置fill属性为这个PatternFill,同时开启drawFilledEnabled = true

示例代码片段:

// 1. 创建斜纹图案
func createDiagonalPattern() -> CGPattern {
    let patternSize = CGSize(width: 8, height: 8)
    return CGPattern(
        info: nil,
        bounds: CGRect(origin: .zero, size: patternSize),
        matrix: CGAffineTransform(scaleX: 1, y: 1),
        xStep: patternSize.width,
        yStep: patternSize.height,
        tiling: .constantSpacingMinimalDistortion,
        isColored: false,
        callbacks: CGPatternCallbacks(
            version: 0,
            drawPattern: { _, context in
                context.setStrokeColor(UIColor.blue.cgColor)
                context.setLineWidth(1)
                context.move(to: CGPoint(x: 0, y: patternSize.height))
                context.addLine(to: CGPoint(x: patternSize.width, y: 0))
                context.strokePath()
            },
            releaseInfo: { _ in }
        )
    )!
}

// 2. 应用到图表数据集
let patternFill = PatternFill(pattern: createDiagonalPattern(), color: .blue)
dataSet.drawFilledEnabled = true
dataSet.fill = patternFill

二、使用Apple Swift Charts实现

如果想用原生Swift Charts,也可以通过AreaMark结合TexturePaint实现斜纹填充:

  • 生成包含斜纹的图片(可以通过Core Graphics绘制,或者提前准备资源图)
  • 将图片转换为TexturePaint,设置给AreaMark的foregroundStyle

示例代码片段:

// 1. 生成斜纹图片
func createDiagonalTextureImage() -> UIImage {
    let size = CGSize(width: 8, height: 8)
    UIGraphicsBeginImageContextWithOptions(size, false, 0)
    let context = UIGraphicsGetCurrentContext()!
    context.setStrokeColor(UIColor.blue.cgColor)
    context.setLineWidth(1)
    context.move(to: CGPoint(x: 0, y: size.height))
    context.addLine(to: CGPoint(x: size.width, y: 0))
    context.strokePath()
    let image = UIGraphicsGetImageFromCurrentImageContext()!
    UIGraphicsEndImageContext()
    return image
}

// 2. 在Swift Charts中使用
Chart {
    AreaMark(
        x: .value("时间", dataPoints.map { $0.time }),
        y: .value("数值", dataPoints.map { $0.value })
    )
    .foregroundStyle(TexturePaint(createDiagonalTextureImage(), scale: 1))
}

三、其他替代方案

如果上述方案不符合需求,还可以考虑:

  • 自定义ChartRenderer(针对Daniel Gindi的库),手动绘制填充区域和斜纹
  • 使用第三方库如AAChartKit,部分版本支持图案填充样式

内容的提问来源于stack exchange,提问作者Youraj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 08:01:11