iOS-Charts 如何将 UIImage 放在一个点旁边

Leo*_*Leo 1 uiimage ios swift ios-charts

我想在 Swift 中使用 iOS-Charts 绘制一些折线图来显示数据。现在,我有一个要求,在每个点旁边放一个小图标。

在此处输入图片说明

现在我可以在图形上添加 UIImage,但问题是如何正确获取每个点的 CGPoint 坐标。

如果我改变设备的方向或设备类型,图像的位置仍然是固定的,不会相应地改变。这是 iPhone 6s 图片。

在此处输入图片说明

这是我当前的代码:

for i in 0..<dataPoints.count {
        let pointLeft = lineChartView.getPosition(dataEntries[i], axis: .Left)

        let image = UIImage(named: numbers[i])
        let imageView = UIImageView(image:image!)
        imageView.frame = CGRect(x: pointLeft.x, y: pointLeft.y, width: 16, height: 16)
        lineChartView.addSubview(imageView)

    }
Run Code Online (Sandbox Code Playgroud)

key*_*eyv 5

您可以修改private func drawCircles(context context: CGContext) insideLineChartRenderer.swift以执行以下操作:在绘制圆圈的循环内使用在那里pt计算的 var 并添加如下内容:

let image = UIImage(named: numbers[i])
image?.drawInRect(CGRect(x: pt.x, y: pt.y, width: 16, height: 16))
Run Code Online (Sandbox Code Playgroud)

显然,您需要使用 CGRect 来按照您需要的方式放置图像。每次设备方向发生变化时都会调用此方法等。

  • 您实际上可以从 LineChartRenderer 扩展并覆盖 drawExtras(CGContext)。这是因为 drawCircles(CGContext) 被声明为 fileprivate。拥有 LineChartView 后,您可以使用 NewChartRenderer(dataProvider: lineChartView, animator: lineChartView.chartAnimator, viewPortHandler: lineChartView.viewPortHandler) 分配新扩展的 LineChartRenderer。lineChartView 只是一个 LineChartView! 类型的 IBOutlet。在我看来,这比修改原始代码要干净得多。 (2认同)