Как сделать UIView в CGContext - PullRequest
       26

Как сделать UIView в CGContext

9 голосов
/ 18 февраля 2011

Я хотел визуализировать UIView в CGContextRef

-(void)methodName:(CGContextRef)ctx {
    UIView *someView = [[UIView alloc] init];

    MagicalFunction(ctx, someView);
}

Итак, здесь MagicalFunction должна визуализировать UIView (может быть его слой) в текущем контексте.

Как сделатьЯ так делаю?

Заранее спасибо!

1 Ответ

16 голосов
/ 19 февраля 2011

Как насчет метода renderInContext CALayer ?

-(void)methodName:(CGContextRef)ctx {
    UIView *someView = [[UIView alloc] init];
    [someView.layer renderInContext:ctx];
}

EDIT: Как отмечено в комментарии, из-за разницы в происхождении в двух координатахВ системах, участвующих в процессе, слой будет отображаться в обратном порядке.Чтобы компенсировать это, вам просто нужно перевернуть контекст по вертикали.Технически это делается с помощью преобразования масштаба и перевода, которое можно объединить в одно матричное преобразование:

-(void)methodName:(CGContextRef)ctx {
    UIView *someView = [[UIView alloc] init];
    CGAffineTransform verticalFlip = CGAffineTransformMake(1, 0, 0, -1, 0, someView.frame.size.height);
    CGContextConcatCTM(ctx, verticalFlip);
    [someView.layer renderInContext:ctx];
}
...