在 swift 中的 NSView 上画一条线
Drawing a line on NSView in swift
这是我目前的代码:
class LineDrawer : NSView {
required init?(coder aDecoder : NSCoder) {
super.init(coder: aDecoder)
}
var line : Array<Line> = []
var lastPt : CGPoint!
override func mouseDown(theEvent: NSEvent) {
super.mouseDown(theEvent)
let location = theEvent.locationInWindow
println(location)
}
override func mouseDragged(theEvent: NSEvent) {
super.mouseDragged(theEvent)
var newPt = theEvent.locationInWindow
line.append(Line(start: newPt, end: lastPt))
lastPt = newPt
}
override func drawRect(dirtyRect: NSRect) {
}
}
class Line {
var start : CGPoint
var end : CGPoint
init(start _start : CGPoint, end _end : CGPoint) {
start = _start
end = _end
}
}
而且我只是不知道如何为线阵列中的每条线绘制具有选定颜色(例如黑色)的线。我是 swift 的新手,所以非常感谢您提供全面的解释。
像这样:
class SomeView:NSView {
override func drawRect(dirtyRect: NSRect) {
NSColor.redColor().set() // choose color
let figure = NSBezierPath() // container for line(s)
figure.moveToPoint(NSMakePoint(x, y)) // start point
figure.lineToPoint(NSMakePoint(x+10.0, y+10.0)) // destination
figure.lineWidth = 1 // hair line
figure.stroke() // draw line(s) in color
}
}
我想这主要是自我解释。坐标是您在视图框架内使用的坐标。
如果行没有更新,那么您需要
view.needsDisplay = true
在你的 viewController 中。放入一个println
可以看到视图实际上是重新绘制的。
对于 swift 5+ 和 MacOS:
override func draw(_ dirtyRect: NSRect) {
NSColor.red.set()
let figure = NSBezierPath()
figure.move(to: NSMakePoint(100, 100)) // {x,y} start point
figure.line(to: NSMakePoint(110.0, 120.0)) // {x,y} destination
figure.lineWidth = 1 // hair line
figure.stroke() // draw line
}
这是我目前的代码:
class LineDrawer : NSView {
required init?(coder aDecoder : NSCoder) {
super.init(coder: aDecoder)
}
var line : Array<Line> = []
var lastPt : CGPoint!
override func mouseDown(theEvent: NSEvent) {
super.mouseDown(theEvent)
let location = theEvent.locationInWindow
println(location)
}
override func mouseDragged(theEvent: NSEvent) {
super.mouseDragged(theEvent)
var newPt = theEvent.locationInWindow
line.append(Line(start: newPt, end: lastPt))
lastPt = newPt
}
override func drawRect(dirtyRect: NSRect) {
}
}
class Line {
var start : CGPoint
var end : CGPoint
init(start _start : CGPoint, end _end : CGPoint) {
start = _start
end = _end
}
}
而且我只是不知道如何为线阵列中的每条线绘制具有选定颜色(例如黑色)的线。我是 swift 的新手,所以非常感谢您提供全面的解释。
像这样:
class SomeView:NSView {
override func drawRect(dirtyRect: NSRect) {
NSColor.redColor().set() // choose color
let figure = NSBezierPath() // container for line(s)
figure.moveToPoint(NSMakePoint(x, y)) // start point
figure.lineToPoint(NSMakePoint(x+10.0, y+10.0)) // destination
figure.lineWidth = 1 // hair line
figure.stroke() // draw line(s) in color
}
}
我想这主要是自我解释。坐标是您在视图框架内使用的坐标。
如果行没有更新,那么您需要
view.needsDisplay = true
在你的 viewController 中。放入一个println
可以看到视图实际上是重新绘制的。
对于 swift 5+ 和 MacOS:
override func draw(_ dirtyRect: NSRect) {
NSColor.red.set()
let figure = NSBezierPath()
figure.move(to: NSMakePoint(100, 100)) // {x,y} start point
figure.line(to: NSMakePoint(110.0, 120.0)) // {x,y} destination
figure.lineWidth = 1 // hair line
figure.stroke() // draw line
}