Suh*_*hal 2 cocoa objective-c core-foundation
CGContextRef ctx = CGContextRetain([[NSGraphicsContext currentContext] graphicsPort]);
CGColorRef color = CGColorRetain([NSColor colorWithCalibratedRed:0 green:0 blue:0 alpha:0.5f].CGColor);
CGContextSaveGState(ctx);
{
CGContextSetFillColorWithColor(ctx, color);
CGContextFillRect(ctx, dirtyRect);
}
CGContextRestoreGState(ctx);
CGColorRelease(color);
CGContextRelease(ctx);
Run Code Online (Sandbox Code Playgroud)
就像错误消息所说的那样,NSColor对象不响应CGColorLion中的消息 - 该方法是在10.8中添加的.在10.7,你必须自己将NSColor转换为CGColor.
这是一个执行转换的函数.在10.8,它只返回NSColor的CGColor.如果没有,它会进行转换.
CGColorRef PRHCreateCGColorWithNSColor(NSColor *color) {
if ([color respondsToSelector:@selector(CGColor)]) {
CGColorRef cgColor = [color CGColor];
return cgColor != NULL ? (CGColorRef)CFRetain(cgColor) : NULL;
}
NSString *colorSpaceName = [color colorSpaceName];
NSColorSpace *colorSpaceNS;
if ([colorSpaceName isEqualToString:NSNamedColorSpace] || [colorSpaceName isEqualToString:NSPatternColorSpace]) {
colorSpaceNS = [NSColorSpace genericRGBColorSpace];
color = [color colorUsingColorSpace:colorSpaceNS];
} else {
colorSpaceNS = [color colorSpace];
}
CGColorSpaceRef colorSpace = [colorSpaceNS CGColorSpace];
size_t numberOfComponents = CGColorSpaceGetNumberOfComponents(colorSpace);
CGFloat components[numberOfComponents];
[color getComponents:components];
return CGColorCreate(colorSpace, components);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
370 次 |
| 最近记录: |