Как поделиться сгенерированным UIImage с siwft 4 - PullRequest
0 голосов
/ 09 июля 2020

Привет, я использую эту функцию для создания UIImage QRCode

func generateQRCode(string: String){
        let data = string.data(using: String.Encoding.ascii)

        if let filter = CIFilter(name: "CIQRCodeGenerator") {
            filter.setValue(data, forKey: "inputMessage")
            let transform = CGAffineTransform(scaleX: 3, y: 3)

            if let output = filter.outputImage?.transformed(by: transform) {
                imageQRCode.image = UIImage(ciImage: output)
                qrImage = UIImage(ciImage: output)
                self.tableView.reloadData()
            }
        }

    }

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

let shareText = NSLocalizedString("SHARE_QR_TITLE", comment: "")
            if let image = qrImage {
                let vc = UIActivityViewController(activityItems: [shareText, image], applicationActivities: [])
                present(vc, animated: true)
            }

, но не могу ею поделиться. Я получил эту ошибку: «Соединение [ShareSheet] недействительно»

1 Ответ

0 голосов
/ 09 июля 2020

Попробуйте, это работает для меня, но не показывает qrcode, поделившись в WhatsApp. Работает нормально с сообщениями, почтой, телеграммой ..

import UIKit

class QRCodeGeneratorViewController: UIViewController {
@IBOutlet var qrImageView: UIImageView!

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
}

func generateQRCode(from string: String) -> UIImage? {
    let data = string.data(using: String.Encoding.ascii)
    
    
    if let filter = CIFilter(name: "CIQRCodeGenerator") {
        filter.setValue(data, forKey: "inputMessage")
        let transform = CGAffineTransform(scaleX: 3, y: 3)
        
        if let output = filter.outputImage?.transformed(by: transform) {
            return UIImage(ciImage: output)
        }
    }
    
    return nil
}

@IBAction func generateQRAction(_ sender: Any) {
    let image = generateQRCode(from: "iOS Developer")
    qrImageView.image = image
}

@IBAction func btnShareClk(_ sender: Any) {
    let shareText = "Hello, world!"

    if let image = qrImageView.image {
        let vc = UIActivityViewController(activityItems: [shareText, image], applicationActivities: [])
        present(vc, animated: true)
        vc.popoverPresentationController?.sourceView = self.qrImageView
    }
}
...