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);
ответ
Как сообщение об ошибке говорит, объекты NSColor не реагируют на CGColor
сообщений в Львином этом методе был добавлен в 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);
}
Благодарим вас за то, что вы терпеливы и понимаете точную проблему и отвечаете хорошим кодом, который помог многим. хороший день :) –
Даже несмотря на то, что он работает, цвет, который я получаю во льве, темнее цвета, который я получаю в Горном льве. например selectedMenuItemColor дает синий и синий соответственно. любые мысли по этому поводу? –
@SuhasAithal: Возможно, они изменили его между версиями ОС. Попробуйте зарегистрировать содержимое массива 'components'. –
Куда он падает? Что такое сообщение об ошибке? – Fogmeister
[NSCalibratedRGBColor CGColor] Непризнанный селектор отправлен ... выглядит как ошибка раннего выпуска ARC. но я сохранил объекты CF. –
Это не связано с сохранением; Ошибка «Unrecognized selector» обеспечивает много вопросов по объектам Objective-C StackOverflow. Это один из наших фаворитов, и вы должны начать искать свой ответ. – trojanfoe