我目前正在散点图上使用自定义标记,发现自己遇到的问题会导致CPTPlotSymbol
从CGPath
上下颠倒而变形。
我已经在游乐场测试了路径创建代码,它可以正常工作,绘制路径的正确形状和方向。
这里是路径绘图代码:
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之间坐标系的差异来解释,但这并不能解释这种扭曲。
谢谢!
答案 0 :(得分:0)
由于Core Plot在Mac和iOS之间共享绘图代码,因此它在两个平台上使用相同的绘图坐标系,其中(0,0)是绘图画布的左下角。这是从iOS上的普通绘图坐标系翻转过来的。