Захват изображения из 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;
}

Перед вызовом скрыть кнопку и т.д., если вам нужно, то это не будет отображаться на изображении также.

Другие вопросы по тегам