Мне нужен UIImageView, который может рисовать себя в цвете или ч / б в соответствии с флагом:
BOOL isGrey;
Я пытаюсь сделать это, рисуя черный прямоугольник поверх оригинального изображения с режимом смешивания Quartz, установленным на Color. Это работает, за исключением того, что оно не учитывает альфа-маску изображения.
См. Иллюстрацию:
альтернативный текст http://img214.imageshack.us/img214/1407/converttogreyscaleillo.png
В поисках Google и SO я нашел и попробовал несколько решений, но ни одно из них не соответствует маске.
Вот код, который создает изображение «Что я получаю» выше:
- (void)drawRect:(CGRect)rect {
if (isGrey) {
CGContextRef context = UIGraphicsGetCurrentContext();
// flip orientation
CGContextTranslateCTM(context, 0, self.bounds.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
// draw the image
CGContextDrawImage(context, self.bounds, self.image.CGImage);
// set the blend mode and draw rectangle on top of image
CGContextSetBlendMode(context, kCGBlendModeSaturation);
CGContextSetRGBFillColor(context, 0.0, 0.0, 0.0, 1.0);
CGContextFillRect(context, rect);
} else {
[self.image drawInRect:rect];
}
}
Есть ли какой-нибудь режим рисования Кварца, который я забыл установить? Я просмотрел Руководство по программированию кварца, но мне так трудно извлечь один бит информации, который вам нужен, из перекрывающихся и гиперссылок.
Очевидно, я ищу общее решение, которое будет применяться к изображениям любой маскированной формы, а не только к показанному кружку.