Захват изображения из UIView не работает на iOS 10.3.3
Я захватил image
от UIView
содержание, как показано ниже, и он работает нормально, но когда я запускаю его в моем iPhone5S с iOS 10.3.3
, Захваченный image
содержит только черный вид.
-(UIImage *)captureImageFromView:(UIView *)view {
UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
В чем проблема? Заранее спасибо.
3 ответа
Решение
Вы можете сделать это, как объясняется @LGP.
Используйте следующую функцию в главном потоке, как показано ниже.
-(UIImage *)captureImageFromView:(UIView *)view {
UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);
[view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
Код основного потока.
dispatch_async(dispatch_get_main_queue(), ^{
UIImage *imgResult = [self captureImageFromView:yourView];
});
Попробуйте использовать drawViewHierarchyInRect
вместо. Если это не сработает, то, скорее всего, проблема заключается в том, что вы захватили неправильное представление или после того, как оно каким-то образом было изменено.
-(UIImage *)captureImageFromView:(UIView *)view {
UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);
[view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
ДЛЯ SWIFT
func snapshot() -> UIImage {
UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, true, UIScreen.main.scale)
self.view.layer.render(in: UIGraphicsGetCurrentContext()!)
let img = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return img!
}
ЗАДАЧА С
- (UIImage *)captureView {
UIGraphicsBeginImageContext(yourview.frame.size);
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextFillRect(ctx, yourview.frame);
[yourview.layer renderInContext:ctx];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSLog(@"size %f %f",newImage.size.height,newImage.size.width);
return newImage;
}
Перед вызовом скрыть кнопку и т.д., если вам нужно, то это не будет отображаться на изображении также.