代码之家  ›  专栏  ›  技术社区  ›  Austin

核心动画视图有时不显示

  •  0
  • Austin  · 技术社区  · 17 年前

    我正在使用Core动画进行一个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,而不是像现在这样将其设置为视图的“层”,会有什么不同吗?

    2 回复  |  直到 16 年前
        1
  •  1
  •   Austin    17 年前

    看起来有一个非常简单的解决方案,但没有很好的文档记录。我没有将root设置为子类视图的层,而是将root创建为新的CALayer,然后将视图的层设置为root。原始问题中的代码现在如下所示:

    // 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];
    

        2
  •  0
  •   Rob Napier    17 年前

    当您说它显示在两个窗口中时,您的意思是在两个窗口中有两个视图类的实例,还是您试图将同一个实际视图实例放入两个窗口中?给定视图只能是单个视图层次结构的一部分。将其安装到一个中会将其从其所在的层次结构中删除。