【问题标题】:Child view stays visible after setting opacity to 0 in superview在超级视图中将不透明度设置为 0 后,子视图保持可见
【发布时间】:2018-05-28 07:49:14
【问题描述】:

我正在为 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 设置为零来影响面板。

【问题讨论】:

    标签: swift macos cocoa nsview alpha


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-11
      • 2011-04-07
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多