2017-04-24 2 views
0

Habe viel gesucht, aber nichts gefunden zu entsprechen. Wirklich einfach Ich möchte eine Linie zeichnen, kaufen Sie einen Knopfdruck. Ich habe eine Klasse, die von NSView, um die Zeichnung zu tun, dies überwacht eine Var und wenn es ändert, um die Ansicht neu zu zeichnen. Ich kann den Mausklick erhalten, um die Ansicht aufzurufen, indem Sie den Wert ändern, und es zeichnet gut. Aber ich kann den Knopf nicht zur Arbeit bringen. Es ruft die Zeichenmethode auf, aber die Ansicht wird nicht aktualisiert ??? Ich weiß, es muss etwas Einfaches sein, aber ich kann es einfach nicht finden. Vielen Dank im Voraus.OSX Swift, Zeichnen Sie eine einfache Linie mit einem Knopfdruck

Unten ist meine View-Klasse und 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 
    } 

} 

Antwort

0

Sie benötigen LineDrawer als subview hinzuzufügen. Ein guter Ort, um hinzuzufügen, ist in der viewDidLoad Methode:

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) 
} 

Und dann ist es endlich zeigen, wenn Sie den Knopf drücken:

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

Sie müssen noch die richtige frame erarbeiten für Ihre LineDrawer Ansicht.

+0

Danke Paulo, es hat mich auf die richtige Spur gebracht. Ich hatte dir nicht gesagt, dass ich eine benutzerdefinierte Ansicht hatte, also benutze die Größe von diesem usw. – HelpWoody

+0

@HelpWoody Ok, großartig :) Viel Glück auf deiner App! –

Verwandte Themen