2012-06-27 13 views
12

Renklerin listesini içeren bir PopUp Düğmesi var. Renk başlığının önünde, aynı renkteki küçük bir kutu (_maybe aynı renkteki bir resim _) göstermem gerekiyor. Yani, ben ( zaten mevcut olacak ) NSColor nesnesini kullanarak bir NSImage nesnesi oluşturabilir eğer, o zaman görüntünün görüntülenmesi için

-(void) setImage:(NSImage *) menuImage

yöntem ait NSMenuItem sınıfını kullanabileceğiniz, yaklaşımın düşünüyordum açılır pencerede renk başlığının önü.

NSColor kullanarak bir NSImage nesnesi oluşturmayı nasıl başarabilirim?
Sorunu çözmek için başka herhangi bir yaklaşım da memnuniyetle karşılanmaktadır. :)
NSColor'dan NSImage oluşturma

+0

anlambilimini değiştirmek için çekinmeyin 990.976/nasıl Oluşturulması-a-renkli-1x1 UIImage-on-the-iphone-dinamik] [1] [1]: http://stackoverflow.com/questions/990976/how Projede öngörülen create-a-renkli-1x1 UIImage-on-the-iphone-dy namically –

cevap

15

Basit kategori yöntem bu

@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 

[DÜZENLE] kaldır kaldırılmış API

+0

Çok teşekkürler @Warren. – rsharma

+0

'- setScalesWhenResized:' ** kullanımdan kaldırılmıştır **. * Bu yöntem, önbelleğe alma davranışıyla ilgilidir. Mac OS X v10.6 ve sonraki sürümlerde, görüntü önbelleğe alma artık gerekli değildir ve bunun sonucunda yedek gerekli değildir. * –

+0

Farkında değil. Bu eski bir koddan kes/yapıştır. Thx –

5

Ve yukarıdakilerin hızlı uzatma varyantı yapacak:

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

İşte Swift var Önceki cevapların 3 kolaylık başlatıcı sürümü:

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

Kullanım örneği: [http://stackoverflow.com/questions/:

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

gerekli :) Bu aradığınızı olmalıdır