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
Antwort
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
Vielen Dank @Warren. – rsharma
'- 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. * –
Nicht realisiert. Dies wird aus einem alten Code ausgeschnitten. Thx –
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
}
}
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 :)
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 –