현재 분산 형 플롯에 맞춤 마커를 사용하고 있는데 CPTPlotSymbol
이 거꾸로되어 왜곡 된 문제가 발생했습니다.CGPath 기반 CPTPlotSymbol이 반전되고 왜곡되었습니다.
나는 놀이터에서 경로 생성 코드를 테스트했으며 올바른 모양과 방향으로 경로를 그려 문제없이 작동합니다.
여기에 경로 그리기 코드입니다 :
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 간의 좌표 시스템의 차이로 설명 할 수 있지만 그 차이는 설명하지 않습니다.
감사합니다.
기호가 왜곡되어 있습니까? 스크린 샷을 게시 할 수 있습니까? –
물론, 이미지는 다음과 같습니다. http://imgur.com/a/nArcB 개요를 'CGPath'로 표시하는 사용자 정의 'MarkerView'가 있습니다. 나는 그 길을 가져 와서 그것을 'CAShapeLayer'에 넣었고 그것을 놀이터의 라이브 뷰에 추가하여 검은 색 마커를 만들었습니다. 빨간색 마커는 'CPTPlotSymbol'에 적용된 동일한 경로입니다. 검은 색 마커의 경우 사각형이 원을 둘러싸고 빨간색은 원이 있어야 함보다 커야합니다. 또한 빨간색 케이스의 화살표 끝에서 누락 된 획이 있습니다. – Nico
검은 색 표식이 흰색 사각형으로 잘리고 빨간색 표식이 흰색 사각형으로 잘리는 것을 제외하고는 차이점이 없습니다. 아래의 답에서 언급했듯이 Core Plot은 iOS에서 뒤집은 좌표계를 사용하므로 플롯 기호 경로를 만들 때 도면 좌표를 조정해야합니다. –