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
}
}
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
@HelpWoody Ok, großartig :) Viel Glück auf deiner App! –