2009-05-26 21 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