0

PDFコンテンツを含むCALayerを表示するカスタムビューがあります。そのために、 CALayer Delegateの使用に対する最初の回答に示されているように、デリゲートNSObjectサブクラスを実装しました。


私はドキュメントベースのアプリを持っているので、ドキュメントを開くことができる開始ウィンドウがあります。カスタムドキュメントからIinitWithWindowNibName:makeWindowControllersメソッドのカスタムwindowController。windowControllerから、windowDidLoadで、カスタムNSViewの変数値を設定し、CALayerを初期化します。同じ場所で、次のコード行を実行してコンテンツを描画します。

[[[PDFViewLayerDelegate alloc] initWithUrl:url andPageIndex:currentPageIndex] drawLayer:layer1 inContext:[[NSGraphicsContext currentContext] graphicsPort]];

何が起こるか:その行を実行する前に、CALayerの背景は緑に設定され、正しいウィンドウにのみ表示されていましたが、PDFコンテンツは、両方のレイヤーが白で塗りつぶされている間のみ最初のウィンドウに描画されます(これも行われます)。デリゲートメソッドで)。

私の質問は次のとおりです。

  • CALayerが、それを作成するカスタムNSViewサブクラスではないビューに描画されるのはなぜですか?さらに別のウィンドウで?
  • 各ウィンドウの両方のビューが同じgraphicsContextを共有していますか?これが原因である可能性があります。
4

1 に答える 1

0

私は問題を理解しました...問題は両方のウィンドウが同じgraphicsContextを共有していると推測したため、currentContextは次のとおりです。

「現在のスレッドの現在のグラフィックス コンテキスト。」


drawRect: はそのビュー内で排他的に描画する責任があり、おそらくすでに何らかの方法でgraphicsContextのものを処理しているため、コンテナーNSViewのdrawRect:メソッド内にCALayer描画関数呼び出しを配置することで、この問題を解決しました。

于 2013-01-03T11:49:34.547 に答える