UIImage из UIView, созданного с помощью snapshotViewAfterScreenUpdates:

Можно ли получить UIImage из UIView, созданного с помощью snapshotViewAfterScreenUpdates?

UIView, возвращенный из snapshotViewAfterScreenUpdates, отлично выглядит при добавлении в качестве подвью, но следующее создает черное изображение:

UIView *snapshotView = [someView snapshotViewAfterScreenUpdates:YES]; 
UIImage *snapshotImage = [self imageFromView:snapshotView]; 

- (UIImage *)imageFromView:(UIView *)view
{
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, YES, 0.0);
    // [view.layer renderInContext:UIGraphicsGetCurrentContext()]; // <- same result...
    [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:NO];
    UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return img;
}

Конечно, можно получить изображение, не полагаясь на snapshotViewAfterScreenUpdates:

UIImage *snapshotImage = [self imageFromView:someView];

К сожалению, при захвате сложного вида drawViewHierarchyInRect не может соответствовать скорости snapshotViewAfterScreenUpdates. Я надеялся, что быстрее получить UIImage из представления, созданного snapshotViewAfterScreenUpdates, возможно ли это?

Ответ 1

Ответ выглядит как НЕТ, а Apple documentation неявно подтверждает это:

Если вы хотите применить графический эффект, например размытие, к снимку, используйте метод drawViewHierarchyInRect:afterScreenUpdates:вместо этого.

Стоит отметить, что пользовательский интерфейс внедрения в сеансе iOS из WWDC13 перечисляет snapshotViewAfterScreenUpdates как самый быстрый метод, но использует код drawViewHierarchyInRect в примере кода.