Технические вопросы и ответы QA1817

Снимки представления на iOS 7

Q: На iOS 7 и позже, как я беру снимок своего представления и сохраняю результат в UIImage?

A: Запускаясь с iOS 7, UIView класс обеспечивает метод-drawViewHierarchyInRect:afterScreenUpdates: который позволяет Вам представить снимок иерархии полного представления как видимый на экране в растровый контекст. На iOS 6 и ранее, то, как получить содержание получения представления, зависит от базового метода получения. Этот новый метод -drawViewHierarchyInRect:afterScreenUpdates: позволяет Вам получить содержание представления получателя и его подпредставлений к изображению независимо от методов получения (например, UIKit, Quartz, OpenGL ES, SpriteKit, и т.д.), в котором представляются представления.

См. Перечисление 1 для примера того, как использовать -drawViewHierarchyInRect:afterScreenUpdates: взять снимок представления на iOS 7 и позже.

Перечисление 1  , Создающее изображение снимка

- (UIImage *)snapshot:(UIView *)view
{
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, YES, 0);
    [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
 
    return image;
}

В дополнение к-drawViewHierarchyInRect:afterScreenUpdates: UIView теперь обеспечивает, еще два создают снимки связанные методы,-snapshotViewAfterScreenUpdates: и-resizableSnapshotViewFromRect:afterScreenUpdates:withCapInsets:. UIScreen также имеет-snapshotViewAfterScreenUpdates:. В отличие от этого UIView -drawViewHierarchyInRect:afterScreenUpdates:, эти методы возвращают a UIView объект. При поиске нового представления снимка используйте один из этих методов. Это будет более эффективно, чем вызов -drawViewHierarchyInRect:afterScreenUpdates: представлять содержание представления в растровом изображении самостоятельно. Можно использовать возвращенное представление в качестве визуального заместителя для текущего представления / экран в приложении. Например, Вы могли бы использовать представление снимка для анимаций, где обновление большой иерархии представления могло бы быть дорогим.



История версии документа


ДатаПримечания
01.05.2014

Редакционные изменения.

12.02.2014

Новый документ, описывающий, как взять снимок представления на iOS 7 и позже.