Предоставление UIView со своими детьми
У меня есть UIView
, у которого есть изображение и некоторые кнопки в качестве подзаголовков. Я хотел бы получить изображение "моментального снимка" с помощью renderInContext
или другого метода.
[clefView.layer renderInContext:mainViewContentContext];
Если я передам ему мой UIView
(как указано выше), тогда я получаю пустое растровое изображение. Ни один из детей не отображается в растровое изображение.
Если я передам ему дочерний вид, который является образом, тогда я получаю изображение этого растрового изображения, и, что неудивительно, ни один из его братьев и сестер (кнопок).
Я как бы надеялся, что renderInContext
возьмет изображение и все его видимые дочерние элементы и превратит их в растровое изображение. У кого-нибудь есть идеи, как это сделать?
Ответы
Ответ 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 предполагает, что дочерние представления не имеют никакого преобразования, кроме перевода. Также я предполагаю, что дочерние представления полностью содержатся в родительском представлении.