29571


myApp（CAD系） for Windowsで作成したベクターデータで  
0.01ミリ単位で保存されています。

これをios上で描画することになったのですが、  
Quartz 2D,Core Graficsなどを使えばよいみたいなことを聞きました。

座標系などがわかりません。

Windowsでは、論理座標系をデバイスコンテキストに設定できたので、  
描画する際は意識はしませんでしたが、同じような考えを持つのでしょうか。

また、なにか参考となる資料等があれば教えてください。  
iosプラットフォームでの開発はしたことがありません。


CC BY-SA 3.0
2016-10-14T09:13:48.420
29555
2016-10-15T00:08:28.617
11148
question
swift ios swift2 swift3
iosでベクターデータを描画するときの座標系


[iOSにおける描画と印刷のガイド](https://developer.apple.com/jp/documentation/DrawingPrintingiOS.pdf)（PDF書類）  
[Quartz 2D
プログラミングガイド](https://developer.apple.com/jp/documentation/drawingwithquartz2d.pdf)（PDF書類）

いずれも、Appleの文書です。ネット上で見つかるCore GraphicsとQuartz 2Dに関する情報の元ネタです。C言語とObjective-
Cをベースにした解説なので、Swiftへの翻訳にとまどうかもしれませんが、ネット上の情報とうまく組み合わせて学習してください。

「myApp（CAD系） for Windows」が、PDF書き出しに対応しているとしたら、話はかんたんになります。Core
Graphicsは、PDFデータを直接取り込みできます。

コンテキストや座標系の話は、紹介した文書の中に解説があります。それを参考にしてください。

Core Graphicsの描画の例を示します。`UIView`のサブクラスを作り、そこに描画します。  
（Swift 3）

[code]

    import UIKit
    
    @IBDesignable
    class DrawView: UIView {
    
        override func draw(_ rect: CGRect) {
            // UIViewのグラフィックスコンテキストを取得。
            guard let context = UIGraphicsGetCurrentContext() else {
                return
            }
            // 多角形のパスを作成。
            // 頂点をポイント。
            context.addLines(between: [CGPoint(x: 40.0, y: 30.0),
                                       CGPoint(x: 80.0, y: 20.0),
                                       CGPoint(x: 120.0, y: 50.0),
                                       CGPoint(x: 60.0, y: 70.0),
                                       CGPoint(x: 20.0, y: 90.0),
                                       CGPoint(x: 50.0, y: 50.0)])
            // パスを閉じる。
            context.closePath()
            // 塗りつぶしの色を決める。
            context.setFillColor(red: 1.0, green: 0.0, blue: 0.0, alpha: 1.0)
            // パスを塗りつぶし。
            context.fillPath()
    
            // 楕円を描画。
            context.addEllipse(in: CGRect(x: 20.0, y: 100.0, width: 100.0, height: 60.0))
            // 線の太さを決める。
            context.setLineWidth(4.0)
            // 線の色を決める。
            context.setStrokeColor(red: 0.0, green: 0.0, blue: 1.0, alpha: 1.0)
            // パスを線画。
            context.strokePath()
        }
    
    }
    
[/code]

クラス名の冒頭に`@IBDesignable`が付いているのは、Storyboard/Interface Builderの編集画面に表示するためのものです。

[![画像の説明をここに入力](https://i.stack.imgur.com/EJ0fQ.png)](https://i.stack.imgur.com/EJ0fQ.png)


CC BY-SA 3.0
2016-10-15T00:08:28.617
29571
2016-10-15T00:08:28.617
18540
29555
answer