我有一个NSPopUpButton,它包含一个颜色列表。在颜色标题前面,我需要显示一个相同颜色的小框(可能是同一颜色的图像)。因此,我在想,如果我可以使用NSImage (已经存在)创建一个NSColor,那么我可以使用-[NSMenuItem setImage:]方法在弹出按钮的颜色标题前面显示图像。
那么,如何使用NSImage创建NSColor呢?
解决这一问题的任何其他办法也是值得欢迎的。:)
发布于 2012-06-27 11:28:28
一个简单的类别方法就可以做到这一点。
@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编辑删除不推荐的API
发布于 2016-11-22 18:16:07
如果您使用的是AppKit,这里有一个Swift 5方便初始化器版本的其他答案。遗憾的是,这在UIKit中行不通
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))如有必要,随时可以更改语义。
发布于 2014-11-01 12:04:03
以及上面的快速扩展变体:
import Cocoa
extension NSImage {
class func swatchWithColor(color: NSColor, size: NSSize) -> NSImage {
let image = NSImage(size: size)
image.lockFocus()
color.drawSwatchInRect(NSRect(origin: .zero, size: size))
image.unlockFocus()
return image
}
}https://stackoverflow.com/questions/11224131
复制相似问题