iOS: image processing de 2 pasos con CoreGraphics

Usando CoreGraphics (dentro de mi método drawRect), estoy tratando de aplicar un modo de mezcla a una image (png transparente), y luego ajustar el alfa del resultado. Estoy asumiendo que esto debe hacerse en dos pasos, pero podría estar equivocado. Esto es lo que tengo hasta ahora (que funciona bien):

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 ?? -- 

Estoy asumiendo que necesito dibujar todo esto en algún tipo de context separado en alguna parte, llamar a CGContextSetAlpha(...) , y luego volver a dibujarlo en mi context original, pero no estoy seguro de cómo hacerlo. Configurar el alpha antes de mi CGContextFillRect final solo cambiará la cantidad en que se aplicó el modo de fusión, no el alfa de la image completa.

EDITAR: captura de pantalla publicada

introduzca la descripción de la imagen aquí

Gracias por adelantado.

Con las capas de transparencia, puede aplicar la mezcla a una image dibujada al 100% y mostrar el resultado al 50%. El resultado se ve así:
Imagen que muestra la salida Utilicé el background texturado para que pudieras ver claramente que la image inferior es 50% transparente para todo, en lugar de solo la otra image como fue el caso en mi bash anterior. Aquí está el código:

 CGContextRef context = UIGraphicsGetCurrentContext(); CGContextTranslateCTM(context, 0.0, self.bounds.size.height); CGContextScaleCTM(context, 1.0, -1.0);//flip context CGRect fullImageRect = (CGRect){42,57,100,100}; CGRect transparentImageRect = (CGRect){12,17,100,100}; CGContextSetRGBFillColor(context, 0.0, 1.0, 0.0, 1); // Draw image at 100% UIImage *testImage = [UIImage imageNamed:@"TestImage"]; CGContextDrawImage(context,fullImageRect,testImage.CGImage); // Set 50% transparency and begin a transparency layer. Inside the transparency layer, the alpha is automatically reset to 1.0 CGContextSetAlpha(context,0.5); CGContextBeginTransparencyLayer(context, NULL); // Draw the image. It is viewed at 100% within the transparency layer and 50% outside the transparency layer. CGContextDrawImage(context, transparentImageRect, testImage.CGImage); // Draw blend on top of image CGContextClipToMask(context, transparentImageRect, testImage.CGImage); CGContextSetBlendMode(context, kCGBlendModeColor); CGContextFillRect(context, transparentImageRect); // Exit transparency layer, causing the image and blend to be composited at 50%. CGContextEndTransparencyLayer(context); 

Editar: se eliminó el contenido antiguo, ya que necesitó mucho espacio y no fue útil. Mira en el historial de revisiones si quieres verlo.