Как сделать снимок экрана UIView?

Мне интересно, как мое приложение для iPhone может сделать снимок экрана определенного UIView как UIImage.

Я попробовал этот код, но все, что я получил, это пустое изображение.

UIGraphicsBeginImageContext(CGSizeMake(320,480));
CGContextRef context = UIGraphicsGetCurrentContext();
[myUIView.layer drawInContext:context];
UIImage *screenShot = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

myUIView имеет размеры 320х480 и имеет несколько подвидов. Как правильно это сделать?

131
задан Leo Dabus 6 November 2017 в 05:03
поделиться

3 ответа

Думаю, вам может понадобиться renderInContext , а не drawInContext . drawInContext - это скорее метод, который вы могли бы переопределить ...

Обратите внимание, что он может работать не во всех представлениях, особенно год назад, когда я пытался использовать его с видом с камеры в реальном времени, он не работал.

73
ответ дан 24 November 2019 в 00:14
поделиться
- (void)drawRect:(CGRect)rect {
  UIGraphicsBeginImageContext(self.bounds.size);    
  [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
  UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext();
  UIImageWriteToSavedPhotosAlbum(viewImage, nil, nil, nil);  
}

Этот метод может быть помещен в ваш класс контроллера.

7
ответ дан 24 November 2019 в 00:14
поделиться
CGImageRef UIGetScreenImage();

Apple теперь позволяет нам использовать его в общедоступном приложении, даже если это частный API

5
ответ дан 24 November 2019 в 00:14
поделиться