rsh*_*rma 15 cocoa objective-c
我有一个包含颜色列表的PopUp按钮.在颜色标题的前面,我需要显示一个相同颜色的小盒子(_可能是相同颜色的图像_).所以,我正在考虑这种方法,如果我可以使用NSColor对象(已经存在)创建一个NSImage对象,那么我可以使用NSMenuItem类的
-(void) setImage:(NSImage *) menuImage
方法在弹出按钮中显示颜色标题前面的图像.那么,如何使用NSColor完成创建NSImage对象?任何其他解决问题的方法也是受欢迎的.:)
War*_*ton 17
一个简单的类别方法将执行此操作
@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
Run Code Online (Sandbox Code Playgroud)
[编辑]删除已弃用的API
这是其他答案的Swift 5便捷初始化程序版本:
extension NSImage {
convenience init(color: NSColor, size: NSSize) {
self.init(size: size)
lockFocus()
color.drawSwatch(in: NSRect(origin: .zero, size: size))
unlockFocus()
}
}
Run Code Online (Sandbox Code Playgroud)
用法示例:
let redSwatchImage = NSImage(color: .red, size: NSSize(width: 128, height: 128))
Run Code Online (Sandbox Code Playgroud)
随时根据需要更改语义:)
以及上面的快速扩展变体:
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
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4828 次 |
| 最近记录: |