Силуэты элементов пользовательского интерфейса остаются, когда они перемещаются в прозрачном NSView - PullRequest
2 голосов
/ 20 октября 2019

У меня есть полупрозрачный (альфа = 0,4) NSView, который содержит другие NSView. Эти подпредставления используют mouseDown и mouseDragged, чтобы изменять свои позиции (устанавливая новые кадры), когда они перетаскиваются. Тем не менее, кажется, что всякий раз, когда виды перемещаются, они оставляют силуэт (см. Рисунок ниже) своего исходного положения. Я смог предотвратить это, изменяя непрозрачность фона (и затем возвращая его обратно) каждый цикл рисования, но это значительно замедляет вычисления при рисовании, как и ожидалось.

Вот изображение (яздесь довольно новое, поэтому не могу добавить изображение прямо сейчас): силуэт движения gif

Любое понимание того, что может происходить и как это исправить, будет высоко оценено.

Спасибо!

РЕДАКТИРОВАТЬ

По запросу, вот соответствующий код. Все перемещаемые NSView - это DraggableView:

class DraggableView: NSView {

    var firstPoint = CGPoint()

    override func mouseDown(with event: NSEvent) {
        firstPoint = (self.window?.contentView?.convert(event.locationInWindow, to: self))!
    }

    override func mouseDragged(with event: NSEvent) {
        let newPoint = (self.window?.contentView?.convert(event.locationInWindow, to: self))!
        let offset = NSPoint(x: newPoint.x - firstPoint.x, y: newPoint.y - firstPoint.y)
        let origin = self.frame.origin
        let size = self.frame.size
        self.frame = NSRect(x: origin.x + offset.x, y: origin.y + offset.y, width: size.width, height: size.height)
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...