MacOSでSwift 3/Xcode 8を使用しています。SwiftでCGContextにテキストを追加する
Iは、(コード参照)、Iは、単純な図形を描画することができる午前NSViewのにdraw
を上書きして、現在のコンテキストを使用して:
クラスサンプル:NSImageView {
override func draw(_ dirtyRect: NSRect) {
super.draw(dirtyRect)
let context = NSGraphicsContext.current()?.cgContext;
let length = CGPoint(x: 100, y: 100)
let p1 = CGPoint(x: 200, y: 200)
let shape = "square"
context!.beginPath()
context!.move(to: p1)
if shape == "line" {
let pointEnd = CGPoint(x: p1.x + length.x, y: p1.y + length.y)
context!.addLine(to: pointEnd)
} else if shape == "square" {
let p2 = CGPoint(x: p1.x + length.x, y: p1.y)
let p3 = CGPoint(x: p1.x + length.x, y: p1.y + length.y)
let p4 = CGPoint(x: p1.x, y: p1.y + length.y)
context!.addLine(to: p2)
context!.addLine(to: p3)
context!.addLine(to: p4)
context!.addLine(to: p1)
}
context!.setStrokeColor(red: 1, green: 1, blue: 1, alpha: 1.0)
context!.setFillColor(red: 0, green: 1, blue: 0, alpha: 1)
context!.setLineWidth(2.0)
context!.strokePath()
let textColor = NSColor(calibratedRed: 1, green: 1, blue: 1, alpha: 1.0)
let textColorB = NSColor(calibratedRed: 1, green: 1, blue: 1, alpha: 0.0)
let rect = CGRect(x: 200, y: 200, width: 30, height: 130)
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.alignment = .center
let attr = [NSParagraphStyleAttributeName: paragraphStyle, NSForegroundColorAttributeName: textColor, NSBackgroundColorAttributeName: textColorB, NSFontAttributeName:NSFont.init(name: "HelveticaNeue-Thin", size: 14)]
let q: NSString = "hello, world"
let center = CGPoint(x: 0, y: 0)
q.draw(at: center, withAttributes: attr)
}
上記を補正しますメソッド全体を表示します。
これは、テキスト描画以外は期待どおりに動作します。私が試した2つのドローは、最後の2つのラインに示されています。最初は次のように示唆され、クラッシュします(その行のコメントのメッセージを参照)。 2番目は近いですが、CGContextではなくNSDrawingContextを要求します。
私はまた、テキストを(線の真下に)描いておきたいと思います。私はたくさんの検索をして、何も見つからない。 CGContextsには描画テキストに関するメソッドがあるようですが、実際に描画するようなものはありません。明らかにするために、私はコンパイルすることはほとんどなく、ずっと少なく走っていました。
注:私はmacOS開発に新しいです(しかし、いくつかのiOSを行っています)。だから私は非常に明白な何かを見逃す可能性があります
属性の色割り当てに問題がありました。 コードで編集しました。
"私はコンパイルう何も見つからなかった" - あなたがトラブルにコンパイルするために何かを得ることを持っている場合** **コードを表示してください。利用できないコードについてはお手伝いできません。 (さらに、「実際に描画していないようだ」とは、コードを実行しても画面上に何も表示されなかったことを暗示しているようです。) – jtbandes
これらのメソッドもチェックしてください:https://developer.apple.com/library/ content/documentation/Cocoa/Conceptual/AttributedStrings/Tasks/DrawingAttrStrings.html – jtbandes
現在の描画コードは実際に 'stroke' /' fill'コールなしで動作しますか? – jtbandes