Используя CoreGraphics (внутри моего метода drawRect), я пытаюсь применить режим наложения к изображению (прозрачный png), а затем настроить альфа-канал результата. Я предполагаю, что это нужно сделать в два этапа, но могу ошибаться. Вот что у меня есть до сих пор (что отлично работает):
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
//SET COLOR - EDIT... added a more practical color example
CGContextSetRGBFillColor(context, 0.0, 1.0, 0.0, 1);
//flips drawing context (apparently this is necessary)
CGContextTranslateCTM(context, 0.0, self.bounds.size.height);
CGContextScaleCTM(context, 1.0, -1.0);//flip context
//DRAW PIN IMAGE
UIImage *pin = [UIImage imageNamed:@"pin"];
CGRect pinrect = CGRectMake(12, 17, 25, 25);
CGContextDrawImage(context, pinrect, pin.CGImage);//draws image in context
//Apply blend mode
CGContextSetBlendMode(context, kCGBlendModeColor);
CGContextClipToMask(context, pinrect, pin.CGImage); // restricts drawing to within alpha channel
//fills context with mask, applying blend mode
CGContextFillRect(context, pinrect);
CGContextRestoreGState(context);
// -- Do something here to make result 50% transparent ?? --
Я предполагаю, что мне нужно нарисовать все это где-то в каком-то отдельном контексте, вызвать CGContextSetAlpha(...)
, а затем перерисовать обратно в исходный контекст, но я не уверен, как это сделать. Установка альфы перед моим окончательным CGContextFillRect просто изменит количество примененного режима наложения, а не альфу всего изображения.
РЕДАКТИРОВАТЬ: опубликован скриншот
Заранее спасибо.