2016-09-27 6 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

Core PlotはMacとiOSの間で描画コードを共有するため、(0、0)が描画キャンバスの左下隅にある両方のプラットフォームで同じ描画座標系を使用します。これは、iOS上の通常の描画座標系から反転されます。

関連する問題