Сделайте скриншот видимой области UIScrollView - PullRequest
0 голосов
/ 05 марта 2019

У меня есть UIScrollView как подпредставление основного представления контроллера представления.Я пытаюсь сохранить скриншот всего, что видно в рамке только UIScrollView.

UIGraphicsBeginImageContextWithOptions (imageScrollView.bounds.size, false, UIScreen.main.scale) let context = UIGraphicsGetCurrentContext () context?.translateBy (x: 0, y: 0)

    view.layer.render(in: context!)
    let visibleScrollViewImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()


    let popupImageView = UIImageView(image: visibleScrollViewImage)
    popupImageView.layer.borderColor = UIColor.white.cgColor
    popupImageView.layer.borderWidth = 4
    popupImageView.frame = CGRect(origin: CGPoint(x: 0, y: 400), size: CGSize(width: 400, height: 400))

    imageScrollView.removeFromSuperview()

    view.addSubview(popupImageView)

Часть с popupImageView предназначена только для проверки и просмотра того, что на самом деле сохраняется, кажется, есть некоторая проблема смещения, горизонтальная ось в порядкено я, кажется, получаю только верхнюю треть изображения, которое я хочу, а над ним просто темное пространство.

Похоже, это должно быть довольно простое решение, но я перебрал все подобные вопросы и могуне могу найти ответы.

Спасибо, куча!

Ответы [ 2 ]

1 голос
/ 05 марта 2019

Попробуйте следующее. Если я делаю это с UITableView контролем, он работает.

import UIKit

class ViewController: UIViewController {
    @IBAction func snapTapped(_ sender: UIButton) {
        UIGraphicsBeginImageContextWithOptions(imageScrollView.bounds.size, true, 1.0)
        imageScrollView.drawHierarchy(in: CGRect(origin: CGPoint.zero, size: imageScrollView.bounds.size), afterScreenUpdates: true)
        if let image = UIGraphicsGetImageFromCurrentImageContext() {
            UIGraphicsEndImageContext()
            myImageView.image = image
        }
    }
}
0 голосов
/ 05 марта 2019
func screenShotMethod()->UIImage
{
  let layer = self.imageScrollView.layer
  let scale = UIScreen.main.scale
  UIGraphicsBeginImageContextWithOptions(layer.frame.size, false, scale);

  layer.render(in: UIGraphicsGetCurrentContext()!)
  let screenshot = UIGraphicsGetImageFromCurrentImageContext()
  UIGraphicsEndImageContext()

  return screenshot!
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...