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
в примере кода.