在superview中将不透明度设置为0后,子视图保持可见

时间:2018-05-28 07:49:14

标签: swift macos cocoa nsview alpha

我正在为macOS应用程序实现一个工具面板,其中一个功能是拖动面板对它们进行重新排序。在我的代码中,拖动面板alpha在拖动开始时设置为0,并且用鼠标拖动它的快照。

问题是在面板视图上将alpha设置为0不会影响面板标题,它仍然可见并显示在拖动视图上方。此外,在重新排序堆栈中的视图后问题消失 - 下次拖动面板时标题也变得不可见。

你可以在这个gif上看到我的问题:

gif

此代码用于面板拖动开始:

private func panelDragStarted(_ gr: NSPanGestureRecognizer) {
        draggedRealView = gr.view!.superview!
        draggedFakeView = createFakeView(for: draggedRealView)
        draggedFakeView.frame = NSRect(origin: draggedRealView.frame.origin, size: draggedRealView.frame.size)
        stack.addSubview(draggedFakeView)
        draggedRealView.alphaValue = 0
    }

最后添加这一行解决了我的问题: gr.view!.alphaValue = 0,但是为什么我应该手动更改标题alpha并不明显 - 它是面板子视图,应该通过设置零alpha到面板来影响。

1 个答案:

答案 0 :(得分:0)

第一次拖动尝试与其他人之间的区别是在堆栈子视图重新排序时将 stack.wantsLayer 属性设置为true。所以我只是将stack.wantsLayer = true移到初始化时间,现在它工作正常。