gpt4 book ai didi

swift - Layer-backed NSView 子类在其非 layer-backed superview 上导致 z-index 问题

转载 作者:行者123 更新时间:2023-11-28 07:05:00 27 4
gpt4 key购买 nike

我试图了解层支持的 NSViews 是如何工作的。我在 playground 中创建了以下代码。

import Cocoa
import XCPlayground

class MyView: NSView {

override init(frame: NSRect) {
super.init(frame: frame)

wantsLayer = true //if commented change centerX & centerY accordingly
layerContentsRedrawPolicy = .OnSetNeedsDisplay
layer!.backgroundColor = CGColorCreateGenericRGB(0.0, 0.0, 0.0, 0.5)
}

required init?(coder: NSCoder) {
super.init(coder: coder)
}

}

let containerView: NSView = NSView(frame: CGRectMake(0, 0, 150, 165))
let myView: MyView = MyView(frame: containerView.frame)
let label: NSTextField = NSTextField(frame: NSRect(x: 0.0, y: 0.0, width: 100, height: 22))
label.stringValue = "Please wait..."
label.drawsBackground = false
label.bordered = false
label.selectable = false
label.textColor = NSColor.whiteColor()

//containerView.addSubview(myView)
containerView.addSubview(myView)
containerView.addSubview(label, positioned: .Above, relativeTo: myView)

XCPShowView("view", containerView)

基本上我已经创建了一个层支持的 NSView 子类。然后我将这个子类添加到非层支持的 containerView 中。我还将 NSTextField 添加到 containerView 中,方法是将其明确定位在层支持的 NSView 子类之上。

我的目标是让 NSTextField 显示在图层支持 View 上方。但是,在辅助编辑器中,NSTextField View 显示在图层支持 View 下方。有人可以帮助理解为什么会这样吗?

最佳答案

在与这个问题斗争了很久之后,我发现我必须设置

label.wantsLayer = true
label.layerContentsUpdatePolicy = .OnSetNeedsDisplay

为了使 z-index 正确。我仍然不确定为什么会这样,因为标签不是 MyView View 层次结构的一部分,而是更广泛的 containerView View 层次结构的一部分,它不是层支持的。

关于swift - Layer-backed NSView 子类在其非 layer-backed superview 上导致 z-index 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30909986/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com