2009-05-26 67 views
0

我正在使用核心動畫在Cocoa項目上工作,我有一個顯示在兩個窗口中的自定義視圖。它總是顯示在一個窗口中,但有時在啓動應用程序時不會顯示在其他窗口中。據我所知,這完全是隨機的。這是我在視圖初始化時調用的代碼。無論視圖是否出現,它都會得到這個代碼。核心動畫視圖有時不顯示

[self setWantsLayer:YES]; 

root = [self layer]; // root is a CALayer 

root.layoutManager = [CAConstraintLayoutManager layoutManager]; 
root.autoresizingMask = kCALayerWidthSizable | kCALayerHeightSizable; 

[root setBackgroundColor:CGColorGetConstantColor(kCGColorBlack)]; 

[self setNeedsDisplay:YES]; 

爲什麼有時會顯示視圖,而有時候視圖不顯示?

編輯:它會有所作爲,如果我創建它自己的根CALayer而不是將其設置爲視圖的「層」像我目前正在做?

回答

1

看起來像是一個非常簡單的解決方案,但它沒有很好的記錄。不是將根設置爲子分類視圖的圖層,而是將根創建爲新的CALayer,然後將視圖的圖層設置爲根。從原來的問題的代碼現在看起來像:

// self is the sub-classed NSView 
[self setWantsLayer:YES]; 

// Set root to a new CALayer 
root = [CALayer layer]; 

root.layoutManager = [CAConstraintLayoutManager layoutManager]; 
root.autoresizingMask = kCALayerWidthSizable | kCALayerHeightSizable; 

[root setBackgroundColor:CGColorGetConstantColor(kCGColorBlack)]; 

// Set the view's layer to root 
[self setLayer:root]; 

我想,有時當我的初始化代碼被稱爲,認爲沒有初始化的與其自身關聯的層,所以根本沒有得到正確分配。這只是一個預感,但通過上述更改已解決了我並不總是顯示視圖的問題。

0

當你說它顯示在兩個窗口中時,是否意味着在兩個窗口中有兩個視圖類的實例,或者你的意思是你試圖將相同的實際視圖實例放入兩個窗口中視窗?給定視圖只能是單個視圖層次結構的一部分。將其安裝到一個將從它所在的層次中刪除它。

+0

同一個自定義(子分類)視圖有兩個實例,每個窗口都有一個實例。它們都是通過將自定義視圖拖放到Interface Builder中的窗口中創建的,然後爲每個窗口設置自定義類。 – Austin 2009-05-26 11:38:51