Кроме того, другое решение гарантирует, что ваши элементы управления создаются в потоке пользовательского интерфейса, а не потоком рабочего потока, например.
Для рендеринга во внеэкранный контекст и сохранения его как CGImageRef:
void *bitmapData = calloc(height, bytesPerLine);
CGContextRef offscreen = CGBitmapContextCreate(..., bitmapData, ...)
// draw stuff into offscreen
CGImageRef image = CGBitmapContextCreateImage(offscreen);
CFRelease(offscreen);
free(bitmapData);
Для рисования на экране:
- (void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextDrawImage(context, rect, image);
}
Вы также можете просто сохранить изображение в свойстве содержимого слоя вида (view.layer.content = изображение
), или использовать UIImageView.
Используйте CGDataProviderCreateWithData
и CGImageCreate
, если Вы не нуждаетесь в растровом контексте и просто хотите CGImageRef
.
Можно использовать CGBitmapContext. Можно генерировать изображение от CGBitmapContext и потянуть его во время drawRect.