Подтвердить что ты не робот

Предоставление UIView со своими детьми

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

[clefView.layer renderInContext:mainViewContentContext];

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

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

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

4b9b3361

Ответ 1

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

UIGraphicsBeginImageContext(clefView.bounds.size);
[clefView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

Ответ 2

Простая 4-строчная версия не работала для меня. У меня есть UIView (с подслоями) и дочерний UITextView. Я могу отобразить UIView в UIImage OK, но дочерний 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 предполагает, что дочерние представления не имеют никакого преобразования, кроме перевода. Также я предполагаю, что дочерние представления полностью содержатся в родительском представлении.