2015-06-18 60 views
1

我想了解層支持的NSViews是如何工作的。我在遊樂場內創建了以下代碼。圖層支持的NSView子類在其非層支持的超級視圖上導致z-index問題

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顯示在層次支持的視圖之上。但是,在助理編輯器中,NSTextField視圖顯示在圖層背景視圖下方。有人能幫助理解爲什麼發生這種情況嗎?

回答

1

這一問題的爭奪頗有幾分後,我能發現我必須設置

label.wantsLayer = true 
label.layerContentsUpdatePolicy = .OnSetNeedsDisplay 

的z-index的是正確的。我仍然不確定爲什麼會出現這種情況,因爲label不是MyView視圖層次結構的一部分,而是更廣泛的containerView的一部分,它不是層次支持的。

相關問題