Только что натолкнулся на одну странную проблему.Я генерирую программно градиент внутри прямоугольника с закругленными углами примерно так:
CGColorSpaceRef colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceAdobeRGB1998);
CGContextRef mcontext = [[NSGraphicsContext currentContext] graphicsPort];
size_t capacityBarGradientNumLocations = 11;
CGGradientRef Gradient;
CGFloat capacityBarGradientLocations[11] = { /* skipped */ };
CGFloat capacityBarGradientColors[44] = { /* skipped */ };
Gradient = CGGradientCreateWithColorComponents (colorSpace, capacityBarGradientColors, capacityBarGradientLocations, capacityBarGradientNumLocations);
CGContextDrawLinearGradient(mcontext,Gradient, CGPointMake(0,baroffset), CGPointMake(0,barheight+baroffset), 0);
Я только что заметил, что один и тот же код дает совершенно разные результаты для Lion и Snow Leopard на одном и том же Mac (у меня двойная загрузка)и монитор с одинаковыми цветовыми профилями.Пожалуйста, взгляните на скриншот:
Левая часть, если взять под Львом, правая - под Снежным Барсом.Как я могу исправить свой градиент под Lion?
Дополнительная информация о изображении выше.Я использовал черный цвет с переменной альфа для генерации полупрозрачного градиента, то есть:
CGFloat capacityBarGradientColors[44] =
{ 0.0, 0.0, 0.0, .65,
0.0, 0.0, 0.0, .35,
/* skipped */
0.0, 0.0, 0.0, .35,
0.0, 0.0, 0.0, .65,
};
Я подумал, может быть, что-то не так с тем, как я использую альфа.Решили использовать реальные цвета с режимом смешивания Multiply и альфа-значением, установленным на 1,0:
CGFloat capacityBarGradientColors[44] =
{ 0x59/255., 0x59/255., 0x59/255., 1.0,
0xa6/255., 0xa6/255., 0xa6/255., 1.0,
/* skipped */
0xa6/255., 0xa6/255., 0xa6/255., 1.0,
0x59/255., 0x59/255., 0x59/255., 1.0,
};
Под Snow Leopard я получил результат, который искал.Но под Lion у меня совершенно другая картина.взгляните на скриншот:
Слева - лев, справа - снежный барс
Вот изменения кода, которые я сделал:
Gradient = CGGradientCreateWithColorComponents (colorSpace, capacityBarGradientColors, capacityBarGradientLocations, capacityBarGradientNumLocations);
CGContextSetBlendMode(mcontext, kCGBlendModeMultiply);
CGContextDrawLinearGradient(mcontext,Gradient, CGPointMake(0,baroffset), CGPointMake(0,barheight+baroffset), 0);
CGContextSetBlendMode(mcontext, kCGBlendModeNormal);