ScreenSaverView与CAEmitterLayer在第二个屏幕上波动

时间:2014-07-20 09:48:55

标签: cocoa core-animation screensaver caemitterlayer

任何想法为什么屏幕保护程序只使用一个普通的ScreenSaverView子类和一个CAEmitterLayer子图层在主屏幕上渲染得很好并且不稳定(好像每个2.帧渲染那里......)二级屏幕..?

这是我的初始化代码:

- (id)initWithFrame:(NSRect)frame isPreview:(BOOL)isPreview
{
   self = [super initWithFrame:frame isPreview:isPreview];
   if (self)
   {
      CAEmitterLayer* emitterLayer = [MyEmitterFactory emitterLayer:self];

      [self setWantsLayer:YES];
      [self.layer addSublayer:emitterLayer];
      [self setAnimationTimeInterval:1/2.0];
   }
   return self;
}

此子类中的其他所有内容都是默认的(由Xcode模板提供)。

有趣的是,backingStoreType听起来像是使用CoreAnimation在ScreenSaverView子类中进行调整的一个很好的候选者,唉所有其他模式除了默认的模式之外不会按照文档使用.. < / p>

(由于动画由Core Animation提供动力,我在setAnimationTimeInterval放入的内容并不重要 - 或完全取消调用,如实验所示)

1 个答案:

答案 0 :(得分:0)

根据NSView setWantsLayer:

的文件

要创建图层托管视图,必须在调用setWantsLayer:方法之前调用setLayer:并提供图层对象;这些方法调用的顺序至关重要。

此外:它是哪个操作系统版本?两个显示器镜像时是否也会出现波动(反之亦然)?