4

私はこの問題の解決策を知っていますが、誰かが私にこの解決策を説明してくれるかどうか興味があります。また、この問題についての言及がオンラインで見つからなかったため、これを公開したいと思いました。追跡するのに数日かけて数時間かかりました。再描画とその選択に関して奇妙な動作をするNSTableViewがあります。問題は次のようになります。

テーブルの内容は、画面に表示されるとすぐに表示されるのではなく、フェードインします。コンテンツをスクロールすると、新しく表示される行もフェードインします。選択(単一または複数)を行って画面からスクロールすると、最初の選択(最初の選択に追加するのではなく、置き換える必要があります)を実行します。選択が正しくクリアされません。スクロールして戻ると、新しい選択に加えて、まだそこにあります。これは表示の更新の問題であり、選択の問題ではありません。つまり、新しい選択が有効で、間違って表示されるだけです。

バインドしていたNSArrayController、基になる配列、並べ替え、すべての接続、設定などを介してこれを追跡しましたが、それはすべてそれとは関係ありません。

問題を解決したのは次のとおりです。ビューエフェクト(右端)インスペクターで、ウィンドウのメインビューの[コアアニメーションレイヤー]のチェックを外します。

誰かがここで何が起こっているのかを説明し、おそらく解決策を改善できますか?

4

1 に答える 1

2

Core Animationのように見えNSTableView、うまくいっていません。「フェード」効果は、CoreAnimationの動作の副産物です。1つのビューにコアアニメーションがある場合、そのビューのすべてのサブビューでも有効になります。

NSTextView一部のインターフェイス要素(およびNSTableViewなど)は互換性がないため、どうしても必要な場合を除いて、MacでCoreAnimationを使用することはお勧めしません。iOSは、主にCore Animationを念頭に置いて設計されているため、CoreAnimationを使用したテーブルビューなどのサポートが大幅に向上しています。

いくつかのより単純なUI要素が互換性があることを知っています(NSTextFieldたとえばNSButton)。

ウィンドウの残りの部分でコアアニメーションがどうしても必要な場合は、テーブルビューをコンテンツビューに直接残したまま、他のすべてのビューをコンテンツビューのサブビューに配置します。その後、他のビューでCoreAnimationを有効にできます。

コメント投稿者は、互換性があるものと互換性がないもののリストに自由に追加してください。

于 2011-07-10T16:13:27.417 に答える