基于CGPath的CPTPlotSymbol反转和失真

时间:2016-09-27 21:06:19

标签: ios core-plot

我目前正在散点图上使用自定义标记,发现自己遇到的问题会导致CPTPlotSymbolCGPath上下颠倒而变形。

我已经在游乐场测试了路径创建代码,它可以正常工作,绘制路径的正确形状和方向。

这里是路径绘图代码:

private func getOuterPathInRect(rect: CGRect) -> CGPath {
    let circlePath: CGPath = {
        let p = CGMutablePath()
        let topHundred = CGRect(x: 0, y: 0, width: 100, height: 100)
        p.addEllipse(in: topHundred)
        return p
    }()
    let arrowPath: CGPath = {
        let p = CGMutablePath()
        p.move(to: CGPoint(x: rect.midX, y: rect.maxY - 5.0))
        p.addLine(to: CGPoint(x: rect.midX - 7.5, y: rect.maxY - 15.0))
        p.addLine(to: CGPoint(x: rect.midX + 7.5, y: rect.maxY - 15.0))
        return p
    }()
    let path = CGMutablePath()
    path.addPath(circlePath)
    path.addPath(arrowPath)
    return path
}

创建CPTPlotSymbol的代码是:

func symbol(for plot: CPTScatterPlot, record idx: UInt) -> CPTPlotSymbol? {
    let index = Int(idx)
    guard items[index].requiresMarker else { return nil }
    let rect = CGRect(x: 0, y: 0, width: 120, height: 120)
    let marker = BallMarkerView()
    marker.contentMode = .center
    let path = marker.pathIn(rect: rect)
    let symbol = CPTPlotSymbol.customPlotSymbol(with: path)
    symbol.size = rect.size
    symbol.fill = CPTFill(color: CPTColor.red())
    return symbol
}

我的目标是使用自定义UIView作为标记,但我无法找到这样做的API,所以我使用了基于路径的标记,并用标记的图像表示填充它。

这是正确的做法吗?

为什么我的路径被扭曲和颠倒?颠倒的路径可以通过UIKit和CoreGraphics之间坐标系的差异来解释,但这并不能解释这种扭曲。

谢谢!

1 个答案:

答案 0 :(得分:0)

由于Core Plot在Mac和iOS之间共享绘图代码,因此它在两个平台上使用相同的绘图坐标系,其中(0,0)是绘图画布的左下角。这是从iOS上的普通绘图坐标系翻转过来的。