2

古いビューを脇に押して新しいビュー (kCATransitionPush タイプ) にスライドさせることで、あるビューを別のビューに交換したいと考えています。CoreAnimation を使用するには、自分のビューで CALayers を操作する必要があります。問題は、setWantsLayer を使用してバッキング レイヤーをウィンドウ コンテンツ ビューにアタッチすると、ビュー内のすべてが歪むことです。

これが、MAAttachedWindow ( http://mattgemmell.com/source )と呼ばれる NSWindow のサブクラスを使用しているという事実と関係があるかどうかはわかりません。画面上の別の要素。

必要に応じて、この歪みのスクリーンショットを提供できます。私は NSViewAnimation でアニメーションを動作させましたが、他の多くの人が経験したように、NSViewAnimation は非常に遅いです。CoreAnimation を使用したいのですが、この問題により使用できません。

どんな洞察も大歓迎です

4

3 に答える 3

1

非整数座標の可能性に加えて、私には、テキストが不透明でないバッファに描画されたように見えます。LCD 対応の Quartz テキスト アンチエイリアシングは、不透明でない背景色の上に描画されてから合成された場合、機能しませ。むしろ、レイヤー/ビューは背景を不透明な背景色で塗りつぶし、その上にテキストを描画する必要があります。

これに対する 1 つの回避策は、次のとおりです。

  • 半透明の背景を描きます。
  • 背景色 alpha=1 でテキストを描画し、同じ色のテキストにストローク追加し、アンチエイリアス領域を囲むようにストローク幅を選択します (ここでは解像度の非依存性に注意してください)。
  • この「ランディング パッド」の上に、通常どおりテキストを描画します。

スクローラーの問題は、スクローラーが -isOpaque を要求している可能性がありますが、そうではありません。不透明度と背景色のレンダリングを適切にいじると役立つはずです。

于 2009-11-26T18:30:55.077 に答える
0

歪みがどのように増加するかを見ると、ビューの境界またはフレームの 1 つ以上が統合されていないと思います。

于 2009-11-11T15:04:05.453 に答える
0

通常のウィンドウでは問題が発生しないというあなたの発言を考えると、MAAttachedWindow をタカの目にする時が来ました。このコードでウィンドウが作成されたときに最初に目にすることの 1 つは、次のとおりです。

[self useOptimizedDrawing:YES];

その行をコメントアウトするとどうなりますか? 次に注目するのは描画コードです。また、-_redisplay メソッドは、画面の更新を無効/再度有効にし、これが発生している間にジオメトリと背景を更新します。これらすべてのことから、レイヤーに裏打ちされたビューやアニメーションとの相互作用に疑問を抱くでしょう.

于 2009-11-10T23:48:37.123 に答える