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 テンプレートによって提供されます)。

面白いことに、CoreAnimation を使用backingStoreTypeしてサブクラスを微調整するのに適しているように思えますが、残念ながら、デフォルトのものを除く他のすべてのモードは、ドキュメントに従って使用されるべきではありません..ScreenSaverView

(アニメーションは Core Animation を利用しているため、何を入れても問題ありません。setAnimationTimeIntervalまた、実験で示されているように、呼び出しを完全に削除することもできます)

4

1 に答える 1

0

NSView setWantsLayerのドキュメントによると:

レイヤーをホストするビューを作成するには、setLayer: を呼び出し、レイヤー オブジェクトを指定してから setWantsLayer: メソッドを呼び出す必要があります。これらのメソッド呼び出しの順序は重要です。

さらに:それはどのOSバージョンですか?2 つのディスプレイがミラーリングされている場合 (またはその逆) にも、途切れが発生しますか?

于 2014-07-28T12:06:57.857 に答える