Как исправить изменение пунктирной линии CoreGraphics при изменении размера представления - PullRequest
0 голосов
/ 22 апреля 2019

У меня есть подкласс NSView, который рисует серию пунктирных линий. Когда я изменяю размер окна, в котором находится вид, пунктирные линии меняют свои шаблоны. Как я могу предотвратить изменение линий шаблонами при изменении размера окна?

Линии рисуются в следующей функции:

func drawLines(in context: CGContext) {
    for line in lines {
        context.move(to: line.start)
        context.addLine(to: line.end)
        context.setLineDash(phase: 0, lengths: [10, 10])
        context.strokePath()
    }
}

Эта функция вызывается из draw (_:):

override func draw(_ dirtyRect: NSRect) {
    guard let context = NSGraphicsContext.current?.cgContext else { return }

    drawLines(in: context)
}

При изменении размера окна рисунок линии меняется - иногда эта пунктирная линия выглядит полностью сплошной:

Image Example 1 Image Example 2

1 Ответ

0 голосов
/ 22 апреля 2019

Оказывается, мой массив lines содержал линии, идущие в обоих направлениях для каждой линии. Это означало, что для каждой линии она рисовала пунктирную линию в обоих направлениях. Эти пунктирные линии перекрывали друг друга и при изменении размера входили и выходили из фазы, что приводит к такому поведению.

...