OSX Draw добавить линию в представлении подкласса с основной графикой - PullRequest
0 голосов
/ 21 октября 2018

Когда я нажимаю кнопку в основной программе AppDelegate.swift, я хотел бы видеть результат добавления строки с графикой ядра.

Примечание. Это нормально с моей реализацией AppKit.

Здесь класс базовой графики:

import Cocoa
class LineDyn: NSView {
    var cgc:CGContext?
    override func draw(_ dirtyRect: NSRect) {
        if cgc == nil{
            cgc = NSGraphicsContext.current?.cgContext
        }
        cgc?.setFillColor(CGColor.black)
        cgc?.fill(bounds)

        addLine(pointInit:CGPoint(x:60,y:60), pointFinal:CGPoint(x:70,y:10))
    }
    func addLine(pointInit:NSPoint, pointFinal:NSPoint){
        if cgc != nil {
            print("non nil")
            cgc?.setStrokeColor(CGColor.white)
            cgc?.setLineWidth(1.0)
            cgc?.strokePath()
            cgc?.move(to: pointInit)
            cgc?.addLine(to: pointFinal)
            cgc?.strokePath()
        }
        else{
            print("nil")
        }
    }
}

Примечание: с базовой графикой я вижу строку, сгенерированную
addLine (pointInit: CGPoint (x: 0, y: 0), pointFinal: CGPoint (x: 50, y: 50)),
, значит, для функции addLine (...) нормально, введите описание изображения здесь , но я не вижугоризонтальная линия от основного:
lineDyn? .addLine (pointInit: NSPoint (x: 0, y: 10), pointFinal: NSPoint (x: 80, y: 10))

Здесьосновной

import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
    @IBOutlet weak var window: NSWindow!
    @IBOutlet weak var cv1: NSView!
    @IBOutlet weak var view: NSView!
    @IBAction func n_lignes_dans_custom_view(_ sender: Any) {
        let frame = cv1.bounds
        let lineDyn = LineDyn(frame: frame)
        cv1.addSubview(lineDyn)
        lineDyn.addLine(pointInit: NSPoint(x: 0, y: 10), pointFinal: NSPoint(x: 80, y: 10))
   }
}




В AppKit я вижу горизонтальную линию, но не линию от draw (), введите описание изображения здесь

Здесь код класса Appkit:

import Cocoa
class LineDyn: NSView {
    let myPath = NSBezierPath()
    override func draw(_ dirtyRect: NSRect) {
        NSColor.black.setFill()
        self.bounds.fill()
        NSColor.white.set();
        myPath.stroke()//obligé
        addLine(pointInit:CGPoint(x:0,y:0), pointFinal:CGPoint(x:50,y:50))
    }
    func addLine(pointInit:NSPoint, pointFinal:NSPoint){
        myPath.move(to: pointInit)
        myPath.line(to: pointFinal)
    }
}

Примечание: нет необходимости добавлять 'cv1.needsDisplay = true' при добавлении графической строки (в основном или в этом клзадница)

Можно ли увидеть строку с графикой ядра?

Еще один вопрос:

С AppKit ок я вижу строкуно когда я использую wand для обновления, выполняю needdisplay = true, строки остаются в представлении подкласса.Как я могу это сделать?

Но с базовой графикой, чтобы увидеть линии с обновлением (needdisplay = true), мне нужно работать с массивом Points в функции 'override draw', но я не хочу работать с массивомдля этого примера.

...