Webkit против SFSafariViewController и Core Data - PullRequest
0 голосов
/ 30 апреля 2019

Какой метод наиболее предпочтителен для встроенного веб-браузера?Мое приложение должно иметь панель инструментов внизу, и мне нужно иметь возможность делать скриншоты посещенных веб-страниц, нажимая кнопку на панели инструментов.

Вот то, с чем я сталкиваюсь.Я хочу иметь возможность щелкнуть ссылку в моем приложении, открыть браузер в приложении, сделать снимок экрана и сохранить основные данные вместе с другой информацией о сайте.

Я могу сохранитьСнимок экрана с камерой. С помощью метода .takesnapshot () для Webkit.Я не смог сохранить его в основных данных.По состоянию на прошлую ночь я обнаружил несколько функций в SO, которые показывают, как сделать снимок экрана UIView и вернуть UIImage, но я не смог преобразовать это обратно в Data, поскольку это то, что Core Data ожидает для двоичного файла.данные.У кого-нибудь есть хороший ресурс для сохранения снимков Webkit в Core Data?

В одной из функций, которые я пробовал прошлой ночью, мне удалось вернуть объект UIImage, но я не смог преобразовать его обратно в данные.Я могу сохранить все остальные данные о сайте в Core Data, но не могу сохранить изображение - фактически, когда я попытался сохранить данные напрямую с помощью метода .takesnapshot () Webkit, результат был равен нулю.

1 Ответ

0 голосов
/ 30 апреля 2019

Я собираюсь ответить на ваш вопрос в двух частях.

WebKit против SFSafariViewController

Если вы хотите иметь настраиваемую панель инструментов с кнопкой для снятия скриншотов, я бы использовал UIViewController с настраиваемой панелью вкладок, куда вы можете добавлять любые кнопки, которые вы хотите, тогда я бы также включил представление WebKit в контроллер представления.Это должно быть довольно просто.

Сохранение скриншота в Core Data

Судя по звукам, вы можете получить скриншот не так, как вы хотите, чтобы начальная и конечная картинкиконтекст выглядит следующим образом:

let layer = UIApplication.shared.keyWindow!.layer
let scale = UIScreen.main.scale
UIGraphicsBeginImageContextWithOptions(layer.frame.size, false, scale)
layer.render(in: UIGraphicsGetCurrentContext()!)
let screenshot = UIGraphicsGetImageFromCurrentImageContext()

Теперь у вас есть скриншот, сохраненный как UIImage? в вашей переменной screenshot.Затем вы должны преобразовать это в данные с помощью:

let data = UIImagePNGRepresentation(screenshot!)

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

...