2016-09-27 2 views
0

현재 분산 형 플롯에 맞춤 마커를 사용하고 있는데 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 간의 좌표 시스템의 차이로 설명 할 수 있지만 그 차이는 설명하지 않습니다.

감사합니다.

+0

기호가 왜곡되어 있습니까? 스크린 샷을 게시 할 수 있습니까? –

+0

물론, 이미지는 다음과 같습니다. http://imgur.com/a/nArcB 개요를 'CGPath'로 표시하는 사용자 정의 'MarkerView'가 있습니다. 나는 그 길을 가져 와서 그것을 'CAShapeLayer'에 넣었고 그것을 놀이터의 라이브 뷰에 추가하여 검은 색 마커를 만들었습니다. 빨간색 마커는 'CPTPlotSymbol'에 적용된 동일한 경로입니다. 검은 색 마커의 경우 사각형이 원을 둘러싸고 빨간색은 원이 있어야 함보다 커야합니다. 또한 빨간색 케이스의 화살표 끝에서 누락 된 획이 있습니다. – Nico

+0

검은 색 표식이 흰색 사각형으로 잘리고 빨간색 표식이 흰색 사각형으로 잘리는 것을 제외하고는 차이점이 없습니다. 아래의 답에서 언급했듯이 Core Plot은 iOS에서 뒤집은 좌표계를 사용하므로 플롯 기호 경로를 만들 때 도면 좌표를 조정해야합니다. –

답변

0

코어 플롯은 Mac과 iOS간에 코드를 공유하기 때문에 두 플랫폼 모두에서 동일한 도면 좌표 시스템을 사용합니다. 여기서 (0, 0)은 도면 캔버스의 왼쪽 하단 모서리입니다. 이것은 iOS의 일반적인 그림 좌표계에서 뒤집 힙니다.