Я ищу возможность изменить цвет сферы вокруг источника света. Прямо сейчас я делаю это, создавая CGImage из цвета и маскируя его PNG. Это работает, но всякий раз, когда я меняю цвет, мне нужно перерисовать все изображение, которое действительно медленно.
Есть ли возможность подкрасить изображение, не перерисовывая его?
Спасибо за вашу помощь
Это мой текущий способ создания сферы:
+ (UIImage *)imageWithColor:(UIColor *)color andImage:(UIImage *)image
{
// create Image from Color
CGRect rect = CGRectMake(0, 0, image.size.width, image.size.height);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context,[color CGColor]);
CGContextFillRect(context, rect);
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
// mask color
CGImageRef actualMask = CGImageMaskCreate(CGImageGetWidth(image.CGImage),
CGImageGetHeight(image.CGImage),
CGImageGetBitsPerComponent(image.CGImage),
CGImageGetBitsPerPixel(image.CGImage),
CGImageGetBytesPerRow(image.CGImage),
CGImageGetDataProvider(image.CGImage), NULL, false);
CGImageRef masked = CGImageCreateWithMask([img CGImage], actualMask);
CGImageRelease(actualMask);
UIImage * retImage = [UIImage imageWithCGImage:masked];
CGImageRelease(masked);
return retImage;
}
Ну, если кто-нибудь знает, как измерить, какой вызов функции такой медленный, я был бы признателен за ответ. Я запустил приложение, измеряющее частоту кадров с помощью инструментов, и, изменяя цвет, я получаю около 3 кадров в секунду, а это не то, чего я ожидал ..;)