如何更改 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来画你喜欢的形状。不过,您有责任决定如何绘制形状。
关于屏幕边缘被切割,这是另一个问题,因为你的形状太大而不能显示在中心。要么改变大小,要么改变你的形状方向等等来解决,由你决定。
我的图表气球被从屏幕边界切掉
这个气球标记是由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来画你喜欢的形状。不过,您有责任决定如何绘制形状。
关于屏幕边缘被切割,这是另一个问题,因为你的形状太大而不能显示在中心。要么改变大小,要么改变你的形状方向等等来解决,由你决定。