アプリケーションバンドルから画像をロードするNSImageViewがあります。
それはそのように設定されています:
coverImage.image = [NSImage imageNamed:@"themeSignEnd.png"];
coverImage.imageScaling = NSImageScaleNone;
coverImage.imageAlignment = NSImageAlignLeft;
画像は問題なく表示されます。
NSImageViewのサイズは、他のいくつかの要因に基づいて計算され、次のコードを使用して設定されます。
coverImage.frame = CGRectMake((1280 - 869) / 2, 0, 869 * percentage, 800);
これは、最初に実行されたとき(アプリケーションの起動時)に完全に正常に機能します。
NSImageViewはサイズを引き継ぎ、含まれる画像は適切な境界で切り取られます。
残念ながら、アプリケーションの実行中にNSImageViewのサイズを変更しようとすると(上記と同じコードを使用して)、目に見えて更新されません。
NSLoggingはcoverImage.frame
、フレーム自体が正しく更新されていることを示しています。ただし、フレームを縮小するときも拡大するときも、ビューは再描画されていないようです。さらに、アプリを終了して再起動すると、NSImageViewは正しい境界線を描画します。
何がそのような振る舞いを引き起こす可能性がありますか?
NSImageViewが単に再描画されない可能性はありますか?もしそうなら、どうすれば再描画を強制できますか?
この動作につながる可能性のある、見逃したNSImageViewの他の癖はありますか?
編集:
このバグは、ImageFrameStyle
プロパティがに設定されている場合にのみ発生することがわかりましたNSImageFrameNone
。フレームが他の値に設定されている場合、フレームは正常に再描画されます。残念ながら、画像はフレームなしで表示する必要があります。
これを説明できるフレームがある場合とない場合のNSImageViewのレンダリングに違いはありますか?