2016-06-28 10 views
1

私は、swiftを使って単純な線をココアアプリケーションに描画しようとしていましたが、CGContextクラスの使い方を完全に理解できませんでした。draw in cocoa swift

私はこのクラス作成しました:

import Cocoa 
class Drawing: NSView { 
override func drawRect(dirtyRect: NSRect) { 
    super.drawRect(dirtyRect) 

    let context = NSGraphicsContext.currentContext()?.CGContext; 

    CGContextBeginPath(context) 
    CGContextMoveToPoint(context, 0, 0) 
    CGContextAddLineToPoint(context, 100, 100) 
    CGContextSetRGBStrokeColor(context, 1, 1, 1, 1) 
    CGContextSetLineWidth(context, 5.0) 
    CGContextStrokePath(context) 

    } 
} 

をので

override func viewDidLoad() { 
    super.viewDidLoad() 
    let dr = Drawing() 
    self.view.addSubview(dr) 
    dr.drawRect(NSRect(x: 0, y: 0, width: 100, height: 100)) 
} 

などのメインウィンドウにそれを使用しますが、それはあなたが初期化する必要がある事

+0

代わりに 'drawRect()'を呼び出してからサブビューを追加してみてください –

+0

NSViewのサブクラス化ではなくUIViewを使うのはなぜですか? –

+3

これは、UIKit(iOS)アプリケーションではないココア(MacOS)だからです。 –

答えて

2

をしませんでしたあなたのDrawingがフレームで表示されていないと、システムはそれを描画する場所を知らないでしょう:

override func viewDidLoad() { 
    super.viewDidLoad() 
    let dr = Drawing(frame: NSRect(x: 0, y: 0, width: 100, height: 100)) 
    self.view.addSubview(dr) 
} 

また、ダビデ氏によると、drawRectはシステムから自動的に呼び出されるため、自分でdrawRectに電話する必要はありません。

+1

さらに、 'drawRect()'を自分で呼び出すべきではありません。システムは、そのメソッドを呼び出す前に、ビューのグラフィックスコンテキストを設定します。あなたがそれを自分で呼び出すと、あなたは同じ設定をしていないので、グラフィックスコンテキストは間違っていて、まったく存在しないかもしれません。 – Caleb