首页 > 解决方案 > 当 UI 元素在透明的 NSView 中移动时,它们的轮廓仍然存在

问题描述

我有一个半透明(alpha = 0.4)的 NSView,其中包含其他 NSView。这些子视图在单击和拖动时使用 mouseDown 和 mouseDragged 来更改它们的位置(通过设置新框架)。然而,似乎每当拖动视图时,它们都会留下原始位置的轮廓(见下面的 gif)。我已经能够通过在每个绘制周期更改背景不透明度(然后将其改回)来防止这种情况发生,但是正如预期的那样,这大大减慢了绘图计算。

这是图像(我在这里相当新,所以还不能直接添加图像): motion silhouette gif

任何有关可能发生的事情以及如何补救的见解将不胜感激。

谢谢!

编辑

根据要求,这里有一些相关代码。被移动的 NSView 都是 DraggableViews:

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

}

标签: swiftcocoa

解决方案


推荐阅读