Получить скриншот текущего экрана в iOS/swift для обмена

Я хотел бы включить на своем телефоне функцию, позволяющую пользователям нажимать кнопку "Поделиться", и тогда они смогут отправлять своим друзьям текстовое сообщение, которое по умолчанию содержит изображение приложения (прямо перед тем, как пользователь нажал кнопку "Поделиться"). Я не могу понять, как это сделать - и всякий раз, когда я ищу, как это сделать, все, что я получаю, - это уроки / ответы о том, как делиться изображениями в библиотеке фотографий телефона или с их камеры. Любая идея о том, как это сделать!

3 ответа

Решение

// создать изображение из скриншота

UIGraphicsBeginImageContext(view.frame.size)
view.layer.renderInContext(UIGraphicsGetCurrentContext())
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

// поделиться изображением

var imagesToShare = [AnyObject]()
imagesToShare.append(image)

let activityViewController = UIActivityViewController(activityItems: imagesToShare , applicationActivities: nil)
activityViewController.popoverPresentationController?.sourceView = self.view
presentViewController(activityViewController, animated: true, completion: nil)
UIGraphicsBeginImageContext(self.view.bounds.size)
self.view.drawHierarchy(in: view.bounds, afterScreenUpdates: false)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

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

Чтобы изменить свое представление на изображение, вы можете добавить это расширение в свой код.

//UIView extension which converts the UIView into an image.
extension UIView {
    func toImage() -> UIImage {
        UIGraphicsBeginImageContextWithOptions(bounds.size, false, UIScreen.mainScreen().scale)

        drawViewHierarchyInRect(self.bounds, afterScreenUpdates: true)

        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return image
    }
}

Передайте представление вашего ViewController туда, например:

   let imageToShare = self.view.toImage()

    let activityItems : NSMutableArray = []()
       activityItems.addObject(imageToShare)


   let activityVC = UIActivityViewController(activityItems:activityItems as [AnyObject] , applicationActivities: nil)
                self.presentViewController(activityVC, animated: true, completion: nil)

Я надеюсь, что это помогает вам.

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