如何更改 ios-图表中的气球标记图像?

How to change Balloon Marker image in ios-charts?

我的图表气球被从屏幕边界切掉 那么我如何更改图像的箭头 是否可以将标记的箭头(箭头指向 leftside/right 侧)更改为图像中的显示?

这个气球标记是由CGContext绘制的,代码如下

CGContextSaveGState(context)
    CGContextSetFillColorWithColor(context, color?.CGColor)
    CGContextBeginPath(context)
    CGContextMoveToPoint(context,
        rect.origin.x,
        rect.origin.y)
    CGContextAddLineToPoint(context,
        rect.origin.x + rect.size.width,
        rect.origin.y)
    CGContextAddLineToPoint(context,
        rect.origin.x + rect.size.width,
        rect.origin.y + rect.size.height - arrowSize.height)
    CGContextAddLineToPoint(context,
        rect.origin.x + (rect.size.width + arrowSize.width) / 2.0,
        rect.origin.y + rect.size.height - arrowSize.height)
    CGContextAddLineToPoint(context,
        rect.origin.x + rect.size.width / 2.0,
        rect.origin.y + rect.size.height)
    CGContextAddLineToPoint(context,
        rect.origin.x + (rect.size.width - arrowSize.width) / 2.0,
        rect.origin.y + rect.size.height - arrowSize.height)
    CGContextAddLineToPoint(context,
        rect.origin.x,
        rect.origin.y + rect.size.height - arrowSize.height)
    CGContextAddLineToPoint(context,
        rect.origin.x,
        rect.origin.y)
    CGContextFillPath(context)

这段代码写在balloon-marker.swift文件

气球标记只是您如何使用它的一个示例。 ChartMarker class 有几个属性,其中有 image 属性。您可以直接使用它来显示您的任何图像。

你需要考虑的是位置和大小。您有责任决定位置和大小,因为默认实现是:

/// Draws the ChartMarker on the given position on the given context
public func draw(context context: CGContext, point: CGPoint)
{
    let offset = self.offsetForDrawingAtPos(point)
    let size = self.size

    let rect = CGRect(x: point.x + offset.x, y: point.y + offset.y, width: size.width, height: size.height)

    UIGraphicsPushContext(context)
    image!.drawInRect(rect)
    UIGraphicsPopContext()
}

你看它只是在 x: point.x + offset.x, y: point.y + offset.y 处绘制图像,width: size.width, height: size.height

您可以简单地创建 ChartMarker 的子 class 并通过覆盖 draw(context context: CGContext, point: CGPoint)

进行自定义

如果你不想用图片,那你就得用你见过的CoreGraphics来画你喜欢的形状。不过,您有责任决定如何绘制形状。

关于屏幕边缘被切割,这是另一个问题,因为你的形状太大而不能显示在中心。要么改变大小,要么改变你的形状方向等等来解决,由你决定。