2017-04-24 20 views
0

これはたくさん見えましたが、一致するものは見つかりませんでした。 本当のシンプルな私は、ボタンを押すだけでラインを描きたい。 私はNSViewから描画を行うクラスを持っています。これはvarを監視し、ビューを再描画するように変更した場合にそれを監視します。 私は値を変更することによってビューを呼び出すためにマウスのクリックを得ることができます。しかし、私はボタンを動作させることはできません。描画メソッドを呼び出すが、ビューは更新されない??? 私はそれが何か単純であることを知っていますが、私はそれを見つけることができません。 ありがとうございます。OSX Swift、ボタンを押すだけで簡単な線を描く

以下は、私のViewクラスとView Controllerです。

// 
// LineDrawer.swift 
// TestDraw3 
// 
// Created by Colin Wood on 21/04/17. 
// Copyright © 2017 Colin Wood. All rights reserved. 
// 

import Cocoa 



class LineDrawer : NSView { 
// Vars 
    var newLinear = NSBezierPath() 


    public var QQ: Int = 0 { // every time QQ changes redraw information in QQ 
     didSet{ 
      boom() // drawing method 
     } 
    } 



// Methods 
    override func draw(_ dirtyRect: NSRect) { 
     NSColor.red.set() 
     newLinear.lineWidth = 5 
     newLinear.lineCapStyle = NSLineCapStyle.roundLineCapStyle 
     newLinear.stroke() 
    } 

    func boom(){ // draw a simple line 
     Swift.print("In BooM") 
     Swift.print(QQ) 
     let lastPt = NSPoint(x: QQ, y: 1) 
     newLinear.move(to: lastPt) 
     let newPt = NSPoint(x: QQ, y: 50) 
     newLinear.line(to: newPt) 
     needsDisplay = true 
    } 

    override func mouseDown(with theEvent: NSEvent) { 
     QQ = QQ + 7 // just add 7 so you can see it being drawn after didSet 
    } 

} 


// 
// ViewController.swift 
// TestDraw3 
// 
// Created by Colin Wood on 15/04/17. 
// Copyright © 2017 Colin Wood. All rights reserved. 
// 

import Cocoa 

class ViewController: NSViewController { 
// Vars 
    @IBOutlet weak var textField: NSTextField! 

// Methods 
    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Do any additional setup after loading the view. 

    } 

    override var representedObject: Any? { 
     didSet { 
     // Update the view, if already loaded. 

     } 
    } 


    @IBAction func button(_ sender: Any) { 
     let v = LineDrawer() 
     v.QQ = 300 // change QQ to call didSet 
    } 

} 

答えて

0

あなたはサブビューとしてあなたLineDrawerを追加する必要があります。

private var line: LinerDrawer! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    line = LinerDrawer() 
    line.frame = NSMakeRect(0, 0, 200, 200) 
    line.QQ = 300 
    line.isHidden = true 
    view.addSubview(line) 
} 

そして、あなたがボタンを押したときに、最後にそれを示しています:

@IBAction func button(_ sender: Any) { 
    line.isHidden = false 
} 

あなたはまだあなたのための正しいframeをうまくする必要があり、それを追加するには良い場所は、viewDidLoad方法でありますLineDrawerビュー。

+0

Pauloさん、ありがとうございました。私はカスタムビューを持っていると言っていなかったので、そのようなサイズのものを使用しています。 – HelpWoody

+0

@HelpWoody大丈夫、あなたのアプリに幸運! –

関連する問題