Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 层备份的NSView子类在其非层备份的superview上导致z索引问题_Swift_Cocoa_Calayer_Nsview_Swift Playground - Fatal编程技术网

Swift 层备份的NSView子类在其非层备份的superview上导致z索引问题

Swift 层备份的NSView子类在其非层备份的superview上导致z索引问题,swift,cocoa,calayer,nsview,swift-playground,Swift,Cocoa,Calayer,Nsview,Swift Playground,我试图理解层支持的NSView是如何工作的。我在一个游乐场中创建了以下代码 import Cocoa import XCPlayground class MyView: NSView { override init(frame: NSRect) { super.init(frame: frame) wantsLayer = true //if commented change centerX & centerY accordingly layerCont

我试图理解层支持的NSView是如何工作的。我在一个游乐场中创建了以下代码

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中。我还在containerView中添加了一个NSTextField,方法是显式地将其定位在层支持的NSView子类之上


我的目标是让NSTextField显示在图层背景视图的上方。但是,在助手编辑器中,NSTextField视图显示在图层备份视图的下方。有人能帮助我理解为什么会发生这种情况吗?

在与这个问题进行了一段时间的斗争后,我发现我必须设置

label.wantsLayer = true
label.layerContentsUpdatePolicy = .OnSetNeedsDisplay
为了使z索引正确。我仍然不确定为什么会出现这种情况,因为标签不是MyView层次结构的一部分,而是更广泛的containerView层次结构的一部分,它不支持层