2012-06-27 2 views
12

Ich habe eine PopUp-Schaltfläche, die eine Liste von Farben enthält. Vor dem Farbtitel muss ich eine kleine Box derselben Farbe anzeigen (_ kann ein Bild der gleichen Farbe _ sein). Also, ich war der Ansatz zu denken, dass, wenn ich ein Objekt NSImage erstellen NSColor Gegenstand (bereits vorhandene sein wird), dann kann ich

-(void) setImage:(NSImage *) menuImage

Methode der NSMenuItem-Klasse verwenden, um das Bild anzuzeigen in Vorderseite des Farbtitels in der Popup-Schaltfläche.

Also, wie kann ich das Erstellen eines NSImage-Objekts mit NSColor erreichen?
Andere Ansätze zur Lösung des Problems sind ebenfalls willkommen. :)Erstellen von NSUmage von NSColor

+0

Dies sollte sein, was Sie suchen: [http://stackoverflow.com/questions/ 990.976/how-to-Create-A-farbigen-1x1-UIImage-on-the-iphone dynamisch] [1] [1]: http://stackoverflow.com/questions/990976/how - erstellen-ein-farbig-1x1-uiimage-on-the-iphone-dy namentlich –

Antwort

15

Eine einfache Kategorie Methode, um diese

@interface NSImage (ImageAdditions) 

+(NSImage *)swatchWithColor:(NSColor *)color size:(NSSize)size; 


@end 

@implementation NSImage (ImageAdditions) 

+(NSImage *)swatchWithColor:(NSColor *)color size:(NSSize)size 
{ 
    NSImage *image = [[[NSImage alloc] initWithSize:size] autorelease]; 
    [image lockFocus]; 
    [color drawSwatchInRect:NSMakeRect(0, 0, size.width, size.height)]; 
    [image unlockFocus]; 
    return image;  
} 

@end 

[EDIT] entfernen veraltete API tun

+0

Vielen Dank @Warren. – rsharma

+0

'- setScalesWhenResized:' ist ** veraltet **. * Diese Methode stand im Zusammenhang mit dem Caching-Verhalten. In Mac OS X 10.6 und neuer ist das Zwischenspeichern von Bildern nicht mehr nötig und daher ist kein Austausch erforderlich. * –

+0

Nicht realisiert. Dies wird aus einem alten Code ausgeschnitten. Thx –

5

Und die rasche Erweiterung Variante von oben:

import Cocoa 

extension NSImage { 
    class func swatchWithColor(color: NSColor, size: NSSize) -> NSImage { 
    let image = NSImage(size: size) 
    image.lockFocus() 
    color.drawSwatchInRect(NSMakeRect(0, 0, size.width, size.height)) 
    image.unlockFocus() 
    return image 
    } 
} 
2

Hier ist ein Swift 3 Bequemlichkeitsinitialisiererversion der vorhergehenden Antworten:

extension NSImage { 
    convenience init(color: NSColor, size: NSSize) { 
     self.init(size: size) 
     lockFocus() 
     color.drawSwatch(in: NSRect(origin: .zero, size: size)) 
     unlockFocus() 
    } 
} 

Anwendungsbeispiel:

let redSwatchImage = NSImage(color: .red, size: NSSize(width: 128, height: 128)) 

Fühlen Sie sich frei, die Semantik nach Bedarf zu ändern :)