Рендеринг UIView со своими детьми - PullRequest
22 голосов
/ 25 апреля 2009

У меня есть UIView, у которого есть изображение и несколько кнопок в качестве его подпредставлений. Я хотел бы получить его «снимок», используя renderInContext или другой метод.

[clefView.layer renderInContext:mainViewContentContext];

Если я передам его UIView (как указано выше), я получу пустой растровый рисунок Ни один из детей не отображается в растровом изображении.

Если я передам ему дочернее представление, являющееся изображением, то получу изображение этого растрового изображения и, что неудивительно, ни одного из его родных элементов (кнопок).

Я надеялся, что renderInContext возьмет изображение и все его видимые дочерние элементы и отобразит его в растровое изображение. У кого-нибудь есть идеи как это сделать?

Ответы [ 2 ]

35 голосов
/ 25 апреля 2009

Попробуйте что-то вроде этого:

UIGraphicsBeginImageContext(clefView.bounds.size);
[clefView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
0 голосов
/ 18 мая 2016

У меня не работала простая 4-строчная версия. У меня есть UIView (с подуровнями) и дочерний UITextView. Я могу визуализировать UIView в UIImage, но дочерний UITextView не обрабатывается.

Мое простое решение заключается в следующем:

CGRect rect = [view bounds];
UIGraphicsBeginImageContextWithOptions(rect.size, YES, 0.0f);
CGContextRef context = UIGraphicsGetCurrentContext();

[view.layer renderInContext:context];
for (UIView *sv in view.subviews)
{
    CGContextTranslateCTM(context, sv.frame.origin.x, sv.frame.origin.y);
    [sv.layer renderInContext:context];
    CGContextTranslateCTM(context, -sv.frame.origin.x, -sv.frame.origin.y);
}

UIImage *capturedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

Обратите внимание, что простое использование CGContextTranslateCTM предполагает, что дочерние представления не имеют никакого преобразования, кроме преобразования. Также я предполагаю, что дочерние представления полностью содержатся в рамке родительского представления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...