2

数日間私をイライラさせてきたので、これについては我慢してください. これは非常に単純なように思えますが、何らかの理由で一連のイライラする問題に遭遇し続けています。私は過去に iOS でより多くの作業を行ってきましたが、OS X で発生しているこの種の問題は一度もありませんでした。AppKit のビュー アーキテクチャに関する基本的なことを理解していないのではないかと思っています。特に、以前は OS X で何かをアニメーション化する必要がなかったため (また、iOS ではデフォルトですべてのビューがレイヤーでサポートされているため)、レイヤーでサポートされたビューとプレーン ビューの間の相互作用についてはあまり詳しくありません。

とにかく、NSTextView オブジェクトを 45 度回転させようとすると大きな問題が発生します。テキストは、より大きなカスタム NSView サブクラスに配置される一部のラベル用ですが、そのほとんどはこの特定の問題とは無関係のようです。私が試したことと私が抱えていた問題について説明します。ラベルの位置は基本的に静的なので、アニメーション可能かどうかは気にしません。ラベルのサイズと位置は動的に生成されたデータに依存するため、ラベルは IB からではなく、プログラムで作成して配置する必要があります。問題があれば、NSTextViews は属性付きの文字列を使用しています。

1) 私は最初にこれを最も簡単に思える方法で行いました.NSTextViewラベルのフレームを設定し、それらをサブビューとしてグラフオブジェクトに追加してから呼び出しました.[labelTextView setFrameRotation:45]それらの上に。これは Mountain Lion では完全に機能しましたが、Lion でテストしたところ、画面に描画されるラベルの高さが不可解に増加しました (後でフレームをログに記録しても、変更されていません)。グラフに重ねたときに読みやすいように、ラベルの背景色を描画する必要があるため、これは受け入れられません。したがって、Lion では、NSTextView に適用される setFrameRotation にバグまたは何かがあります (またはそのように思われます)。誰がそれで何が起こっているのか知っていますか? 10.8 では正しく動作するのに 10.7 では動作しないのは非常に厄介です。SetFrameCenterRotation にも同じ問題があります。ビューをレイヤーベースにするかどうかは、違いがないようです。

2)次に、親ビューと NSTextView レイヤーを使用した後、CATransform3DMakeRotation を使用してこれを実行しようとしました。行を使用しましたlabelTextView.layer.transform = CATransform3DMakeRotation(M_PI_4, 0, 0, 1.0);が、これを行うとテキストビューが回転しません。テストとして、色付きの背景を持つプレーンな NSView を使用して同じことを試しましたが、正しく回転します。これが NSTextView で機能しない理由を知っている人はいますか?

3) NSTextView を NSView コンテナーに囲み、その上で setFrameRotation を呼び出してみました。これは正しく回転しますが、プロセスを強制終了しない限り、コアアニメーションで無限の再帰がトリガーされ、ギガバイトのRAMがすぐに消費されます! 繰り返しますが、そこで何が起こっているかについてのアイデアはありますか?!?

4)Autolayoutを使用してラベルを配置し、フレームを設定して手動で配置することをすべて試しました。どちらでも結果に違いはありません。

5) 完全にカスタムの描画を使用してこれを行うこともできますが、この特定のケースでは多くの作業が必要になります。10.7をサポートするためだけにそれをしたくありません。NSTextField を試して、パート 1 で同じ問題が発生するかどうかを確認することもできますが、NSTextView の機能の一部が必要なため、面倒です (これは単なる 1 行のテキストの塊ではありません)。

ここで何が間違っていますか?10.7 + 10.8 でこれほど単純なものを正しく動作させるのがこれほど難しいとは想像もしていませんでした。

更新: NSTextView を NSTextField に置き換えてみたところ、3) の問題は解消されました (段落のスタイリングはまだ希望どおりではありませんが、修正できる可能性があります)。NSTextView が、明らかに NSTextField が回転していない場所で回転するという問題を抱えている理由についてのアイデアはありますか? それは私には正気ではないようです。次に、コンテナーなしで NSTextField を試して、Lion での描画の不具合にも悩まされているかどうかを確認します。

更新 2: NSTextView の代わりに NSTextField を使用して回転させてみましたが、Lion と Mountain Lion の両方で完全に機能しました。回転後にテキストビューのサイズが変わる視覚的な不具合も解消されます。したがって、答えは、NSTextViewは、複数のバグを引き起こすことなくフレームを回転させることがまったくできないということだと思います(特にOS Xの古いバージョンでは)。その場合、NSTextView がそのように使用されることを意図していない場合、Apple のドキュメントにはおそらくそのように記載されているはずです。それが事実であることを誰かが確認できますか?

4

0 に答える 0