画上可可斯威夫特



我一直在尝试用swift在cocoa应用程序中画一条简单的线,但是我不能完全理解如何使用CGContext类。

我创建了这个类:

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

但是它什么也没做

你需要用一个框架初始化你的Drawing视图,否则系统将不知道在哪里绘制它,像这样:

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

也如David所说,您不需要自己调用drawRect,因为它是由系统自动调用的。

我的2美分斯威夫特5。x Xcode 10:

override func draw(_ dirtyRect: NSRect) {
    super.draw(dirtyRect)
    guard let context = NSGraphicsContext.current?.cgContext else{
        return
    }
    context.beginPath()
    context.move(to: CGPoint.zero)
    context.addLine(to: CGPoint( x: 100, y: 100))
    context.setStrokeColor(CGColor( red: 1, green: 0, blue: 0, alpha: 1))
    context.setLineWidth(5.0)
    context.strokePath()
}

您不需要添加视图或使用CoreGraphics指令。简单地这样做:(编辑:我添加了更新示例代码)

class View: NSView {
    
    var p1: NSPoint = .zero { 
        didSet { needsDisplay = true }
    }
    
    var p2: NSPoint = NSPoint(x: 100, y: 100) {
        didSet { needsDisplay = true }
    }
    // Returns the rect using the two points
    var rect: NSRect {
        NSRect(x: p1.x, y: p1.y,
               width: p2.x - p1.x, height: p2.y - p1.y)
    }
    
    // Draw a rectangle and its diagonal
    override func draw(_ dirtyRect: NSRect) {
        // Draw rect 
        
        let rect = self.rect        
        NSColor.red.setFill()
        NSColor.black.setStroke()
        rect.fill()
        rect.stroke()
        // Draw line
        let path = NSBezierPath()
        path.move(to: p1)
        path.line(to: p2)
        path.stroke()
    }
}

不要忘记调用 myView.needsDisplay = true 来更新内容

从那里,检查自动完成,发现Cocoa绘制函数绘制路径,椭圆形,圆角矩形。欢呼:)

相关内容

  • 没有找到相关文章

最新更新