2012-06-27 2 views
12

У меня есть кнопка PopUp, которая содержит список цветов. Перед заголовком цвета мне нужно отобразить маленькую коробку того же цвета (_maybe изображение того же цвета _). Таким образом, я думал о том подходе, что если я могу создать объект NSImage используя NSColor объект (который уже будет присутствовать), то я могу использовать

-(void) setImage:(NSImage *) menuImage

метод NSMenuItem класс для отображения изображения перед названием цвета в всплывающей кнопке.

Итак, как я могу создать создание объекта NSImage с помощью NSColor?
Любые другие подходы к решению проблемы также приветствуются. :)Создание NSImage от NSColor

+0

Это должно быть то, что вы ищете: [http://stackoverflow.com/questions/ 990976/как к Create-A-окрашенную-1x1-UIImage-на-iphone-динамически] [1] [1]: http://stackoverflow.com/questions/990976/how -в-Create-A-окрашенную-1x1-UIImage-на-iphone-ау namically –

ответ

15

Простой метод категории будет делать это

@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] удалить осуждается API

+0

Большое спасибо @Warren. – rsharma

+0

'- setScalesWhenResized:' is ** устарело **. * Этот метод был связан с поведением кэширования. В Mac OS X v10.6 и более поздних версиях кеширования больше не требуется, и в результате нет необходимости в замене. * –

+0

Не понял. Это вырезать/вставить из старого кода. Thx –

5

И стремительный вариант продолжения с выше:

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

Вот Swift 3 версии инициализатора удобного использования предыдущих ответов:

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

Пример использования:

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

Вы можете изменить семантику по мере необходимости :)

Смежные вопросы