захват содержимого слоя в классе - PullRequest
0 голосов
/ 25 апреля 2010

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

Метка создана другим классом. Класс меток создает UIImageView и UITextView поверх него.

Это метод инициализации основного класса миниатюр:

- (id)initWithFrame:(CGRect)frame
{
    if ([super initWithFrame:frame] == nil) {
        return nil;
    }

 CGRect myFrame = CGRectMake(0, 0, 100, 100);
 myLabel = [[myLabelClass alloc] initWithFrame: myFrame]; //myLabelClass is a UIImageView based class
 [myLabel setCenter:CGPointMake(50, 50)];
 [self addSubview: myLabel];

  return self;
}

Класс меток просто создает UIImageView и UITextView и помещает в него текст.

Итак, у меня есть это

 MAIN VIEW CONTROLLER   |   
                        |___ UIImageView WITH LABEL
                                                |
                                                |____ label background (UIView)
                                                |____ UITEXTVIEW (text)

Теперь я хочу записать содержимое всех этих трех компонентов в контекст кварца.

Мне нужно писать с использованием drawInRect, потому что мне нужно записать полный объект в точное местоположение.

Я ожидал, что object.layer.contents будет изображением, эквивалентным этим 3 "слоям", другими словами, изображением объекта, фоном метки и текстом метки, как если бы я создали эти 3 объекта в Photoshop и сгладили композицию.

Я также ожидаю thumbnail.myLabel.layer.contents до содержит визуализированное содержимое UITextView поверх фона метки.

Проблема в том, что когда я использую

UIImage *myImage = [UIImage imageWithCGImage:thumbnail.myLabel.layer.contents];
[myImage drawInRect:CGRectMake(0, 0, 100, 100)];

Я ничего не получаю.

Как получить «сплющенное» изображение, получающееся в результате для всего объекта (включая его подпредставления)?

спасибо

1 Ответ

2 голосов
/ 25 апреля 2010

CALayer содержимое действительно, только если вы установите его. Попробуйте создать контекст с UIGraphicsBeginImageContext и использовать CALayer renderInContext для создания изображения. Я использую что-то вроде этого в качестве категории UIView:

-(UIImage *) asImage {
    UIImage     *result = nil;

    UIGraphicsBeginImageContext( [self bounds].size );
    [[self layer] renderInContext:UIGraphicsGetCurrentContext()];
    result = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

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