Нарисуйте фоновое изображение, используя CGContextDrawImage - PullRequest
0 голосов
/ 10 мая 2011

Я хочу нарисовать на UIView, у которого есть фоновое изображение, которое я установил, используя код ниже:

- (void)setBackgroundImageFromData:(NSData *)imageData {
    UIImage *image = [UIImage imageWithData:imageData];

    int width = image.size.width;
    int height = image.size.height;
    CGSize size = CGSizeMake(width, height);

    CGRect imageRect = CGRectMake(0, 0, width, height);

    UIGraphicsBeginImageContext(size);
    CGContextRef currentContext = UIGraphicsGetCurrentContext();

    CGContextTranslateCTM(currentContext, 0, height);
    CGContextScaleCTM(currentContext, 1.0, -1.0);

    CGContextDrawImage(currentContext, imageRect, image.CGImage);

    UIGraphicsEndImageContext();
}

Начальное представление создается с использованием кода из примера Apple GLPaint.Для моей жизни это фоновое изображение не отображается.Чего мне не хватает?

Спасибо!

1 Ответ

0 голосов
/ 10 мая 2011

Вы успешно создаете UIImage и imageRect.Затем вы начинаете контекст изображения, к которому рисуете изображение, рисуете изображение в контексте и заканчиваете контекст.Проблема в том, что вы просто позволяете контексту истечь, ничего с ним не делая.

В UIKit вы не выдвигаете новые визуальные эффекты вверх, вы ждете, пока не будет запрошено рисование.Внутренние механизмы кешируют ваши изображения и используют их для перемещения и иного перерисовывания экрана с обычными 60 кадрами в секунду.

Если это пользовательский подкласс UIView, то вы, вероятно, хотите сохранить UIImage и скомпоновать его какчасть вашего drawRect:.Вы можете установить содержимое вашего UIView как изменившееся, позвонив по номеру setNeedsRedraw - вас попросят перерисовать его в какой-то момент в будущем.

Если это не пользовательский подкласс, тогдасамое простое, что нужно сделать, это обернуть это представление во внешнее представление и добавить за ним UIImageView, к которому можно установить UIImage.

...