2

任何想法为什么仅使用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听起来确实是ScreenSaverView使用 CoreAnimation 调整子类的好选择,可惜除了默认模式之外的所有其他模式都不能按照文档使用。

(由于动画由 Core Animation 提供支持,所以我输入什么并不重要setAnimationTimeInterval- 或者完全删除调用,如实验所示)

4

1 回答 1

0

根据NSView setWantsLayer 的文档:

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

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

于 2014-07-28T12:06:57.857 回答