2016-01-14 24 views
9

Mam kilka zdjęć w moich zasobach. Co próbuję zrobić, to renderowanie obrazu w pasku stanu OSX jak następuje:Rendering tego samego obrazu o różnych rozmiarach

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

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

a także używając go w jednym z moim zdaniem, która otwiera:

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

Problemem jest to, jak najszybciej i ustawić obraz paska stanu, obraz w widoku zmienia się również, czyli zarówno kolor i rozmiar 18x18 (zmiany)

próbowałem, używając

icon?.cacheMode = NSImageCacheMode.Never 

ale nie ma efektu.

Czy tak powinno być? Czy nie mogę użyć tego samego obrazu i renderować go inaczej w różnych miejscach. Oba są różne instancje NSImage.

+0

Spróbuj ustawić właściwość szablonu NSImage na fałszywy –

+0

Szablon potrzebny do ustawienia ikony statusu –

+0

Myślę, że masz rację myśląc, że otrzymujesz wersję z pamięci podręcznej. Jednak właściwość 'cacheMode' ma jedynie związek z rzeczywistym rysunkiem. Czy próbowałeś zrobić wyraźną kopię obrazu? 'icon = icon.copy()' –

Odpowiedz

5

Obie są różne instancje NSImage.

Nie są, i to jest rzeczywiście, twoim problemem.

+ [NSImage imageNamed:] może zwrócić istniejącą buforowaną instancję obrazu.

Jeśli chcesz zmienić rozmiar obrazu bez wpływu na nikogo, kto może mieć referencję, zrób jego kopię. Kopia NSImage jest lekka - nie powiela podstawowych reprezentacji obrazu, które przechowują dane renderowania (bitmapy w przypadku PNG).

3

Przypuszczam, że najpierw trzeba zmienić rozmiar obrazu. W tym celu możesz użyć różnych sposobów. Na przykład możesz napisać rozszerzenie dla klasy NSImage. Na przykład: Resize NSImage in Swift

+0

Również sugeruję, aby przeczytać ładny artykuł na temat rozmiaru ikon paska stanu: https://alastairs-place.net/blog/2013/07/23/nsstatusitem-what- size-should-your-icon-be / – toohtik