Я вызываю следующий код от drawRect
- (void) drawPartial:(UIImage *)img colour:(UIColor *)colour {
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
CGContextTranslateCTM(context, 0.0, self.bounds.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextDrawImage(context, self.frame, img.CGImage);
if (colour!=nil) {
CGContextSetBlendMode (context, kCGBlendModeColor );
CGContextClipToMask(context, self.bounds, img.CGImage);
CGContextSetFillColor(context, CGColorGetComponents(colour.CGColor));
CGContextFillRect (context, self.bounds);
}
self.currentImage=UIGraphicsGetImageFromCurrentImageContext();
CGContextRestoreGState(context);
}
Infact Я называю это несколько раз, чтобы создать составное изображение, динамически окрашенное в. Каждый переданный img - фактически прозрачное наложение с различной частью изображения на нем.
Я могу создать свое составное изображение, вызывая его несколько раз в drawrect. Проблема возникает, когда я хочу обновить одну часть изображения. В идеале я мог бы вызвать вышеупомянутую функцию и просто изменить одну часть: я пытался играть с self.clearsContextBeforeDrawing безрезультатно.
Тогда я подумал, что постараюсь сохранить копию изображения с каждого рисунка в виде кэшированного изображения состояния - таким образом, мне просто нужно наложить новую часть на это: два вызова, а не 15.
Однако строка self.currentImage = UIGraphicsGetImageFromCurrentImageContext () не возвращает мне текущее изображение, поэтому я не могу создать кэшированную копию.
Любая помощь по любому из подходов была бы очень признательна. (или, очевидно, укажите мне, как я должен это делать!)
EDIT
Я также попытался составить изображение отдельно, используя практически один и тот же код, а затем нарисовал его, но опять же я не могу получить изображение ...
- (UIImage *) overlayImage:(UIImage *)srcImage withImage:(UIImage *)overlayImage ofColour:(UIColor *)colour {
CGSize size =srcImage.size;
CGRect box = CGRectMake(0, 0, size.width, size.height);
UIGraphicsBeginImageContext(size);
CGContextRef context=UIGraphicsGetCurrentContext();
CGContextTranslateCTM(context, 0.0, size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextDrawImage(context, box, srcImage.CGImage);
if (colour!=nil) {
CGContextSetBlendMode (context, kCGBlendModeColor ); //kCGBlendModeMultiply
CGContextClipToMask(context, box, overlayImage.CGImage); // respect alpha mask
CGContextSetFillColor(context, CGColorGetComponents(colour.CGColor));
CGContextFillRect (context, box);
}
UIImage *result = UIGraphicsGetImageFromCurrentImageContext();
//UIImage *result = [UIImage imageWithCGImage: CGBitmapContextCreateImage (context)];
UIGraphicsEndImageContext();
return result;
}