Как отобразить иерархию UIView в CGContext с помощью модели композиции CoreAnimation

Я пытаюсь отобразить иерархию UIView в CGContext или, в конечном итоге, в UIImage. Некоторые дочерние представления имеют трехмерные преобразования, которые renderInContext: игнорируются вместе с тенями и некоторыми другими свойствами CALayer.

Из CALayer.h:

/*
 * WARNING: currently this method does not implement the full
 * CoreAnimation composition model, use with caution. */

- (void)renderInContext:(CGContextRef)ctx;

После звонка в UIGraphicsBeginImageContext перепробовал несколько вариантов.

[self drawRect:[self bounds]];
[self.layer.delegate drawLayer:self.layer inContext:UIGraphicsGetCurrentContext()];
[self.layer renderInContext:UIGraphicsGetCurrentContext()];
[self.layer display];

В лучшем случае иерархия представлений отображается без трехмерных преобразований. В худшем случае изображение пустое. Я хотел бы получить действительный альфа-канал в изображении, поэтому снимок экрана не совсем работает.

Есть ли способ визуализировать иерархию UIView с сохранением всех преобразований и свойств слоя?

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


person drawnonward    schedule 22.12.2010    source источник
comment
Вы когда-нибудь сталкивались с этой проблемой?   -  person kevboh    schedule 20.06.2011


Ответы (1)


Мне очень жаль, но у вас нет возможности это сделать.

Текущее состояние анимации слоя является частным и недоступно. Вероятно, это связано с соображениями производительности. Включение доступа к немедленным значениям анимируемых свойств и наличие значений в структурах, совместимых с Core Graphics, снизит производительность графики.

person Sulthan    schedule 01.11.2011