snapshotView (afterScreenUpdates: true) возвращает пустое представление при запуске на реальном устройстве - PullRequest
2 голосов
/ 01 июля 2019

При запуске в симуляторе (iPhone 7 и iPhone XR) snapshotView (afterScreenUpdates: true) работает отлично и как и ожидалось.Однако, когда я тестирую его на своем физическом устройстве iPhone 7, он возвращает пустое представление, но с правильным фреймом

Мне нужен объект UIView и я не могу использовать UIImage, как предлагают многие из предыдущих ответов на подобные вопросы.

let snappedView = view.snapshotView(afterScreenUpdates: true)

Ответы [ 2 ]

0 голосов
/ 05 июля 2019

Вы можете использовать эту функцию, чтобы сделать снимок экрана вашего iPhone, если это то, что вам нужно:

func takeSnapshot() {
  UIGraphicsBeginImageContext(view.frame.size)
  view.layer.render(in: UIGraphicsGetCurrentContext()!)
  let img = UIGraphicsGetImageFromCurrentImageContext()
  UIGraphicsEndImageContext()
}
0 голосов
/ 01 июля 2019

Может быть, это расширение будет работать для вас:

public extension UIView {

    public func snapshotImage() -> UIImage? {
    UIGraphicsBeginImageContextWithOptions(bounds.size, isOpaque, 0)
        drawHierarchy(in: bounds, afterScreenUpdates: false)
        let snapshotImage =         UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return snapshotImage
    }

    public func snapshotView() -> UIView? {
        if let snapshotImage = snapshotImage() {
            return UIImageView(image: snapshotImage)
        } else {
            return nil
        }
    }
}
...