2016-01-14 21 views
9

私の資産にはたくさんの画像があります。異なるサイズの同じ画像をレンダリングする

let icon = NSImage(named: "statusIcon") 
icon?.size = NSSize.init(width: 18, height: 18) 

icon?.template = true 
statusItem.image = icon 
statusItem.menu = statusMenu 

をしても開き、私の見解の一つで、それを使用して::私は何をしようとしていることは、次のようOSXのステータスバーに画像をレンダリングです

self.dayIcon.image = NSImage(named: "statusIcon") 

問題できるだけ早くです私は、ステータスバーの画像を設定するビューの画像も変化し、すなわち、色とサイズの両方(18×18に変更)

Iは

icon?.cacheMode = NSImageCacheMode.Never 
012を使用しようとしています

しかし効果はありません。

これはどうなるのでしょうか?同じ画像を使用して別の場所で別の画像をレンダリングすることはできません。それらはどちらも異なるNSImageインスタンスです。

+0

NSImageテンプレートプロパティをfalseに設定してみてください –

+0

ステータスアイコンを設定するにはテンプレートが必要です –

+0

キャッシュされたバージョンが表示されていると思います。ただし、 'cacheMode'プロパティは実際の図面とのみ関係します。あなたはイメージの明示的なコピーを作ろうとしましたか? 'icon = icon.copy()' –

答えて

5

これらはどちらも異なるNSImageインスタンスです。

これは実際問題ではありません。

+ [NSImage imageNamed:]は、イメージの既存のキャッシュされたインスタンスを返すことがあります。

参照を保持している他の人に影響を与えずにイメージのサイズを変更する場合は、そのイメージのコピーを作成します。 NSImageのコピーは軽量です。レンダリング(ビットマップ、PNGの場合)データを保持する基底のイメージ表現を複製しません。

3

まず画像のサイズを変更する必要があるとします。それを行うためには、さまざまな方法を使用することができます。例えば、NSImageクラスの拡張を書くことができます。例えば、Resize NSImage in Swift

+0

またステータスバーアイコンのサイズ変更についての素敵な記事を読むことができます:https://alastairs-place.net/blog/2013/07/23/nsstatusitem-what-あなたのアイコンがすべきサイズ/ – toohtik

関連する問題