관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] View를 UIImage로 변환(캡쳐하기), 이미지 공유하기 기능 (카톡, 메세지, 메모 등) 본문

iOS 응용 (swift)

[iOS - swift] View를 UIImage로 변환(캡쳐하기), 이미지 공유하기 기능 (카톡, 메세지, 메모 등)

jake-kim 2020. 11. 23. 21:11

폰에 카톡, 메세지가 깔려있을 경우, 공유할 수 있게끔 자동으로 추가

View를 이미지로 변환 & 공유하기

  • View를 UIImage로 변환
extension UIView {
    func transfromToImage() -> UIImage? {
        UIGraphicsBeginImageContextWithOptions(bounds.size, isOpaque, 0.0)
        defer {
            UIGraphicsEndImageContext()
        }
        if let context = UIGraphicsGetCurrentContext() {
            layer.render(in: context)
            return UIGraphicsGetImageFromCurrentImageContext()
        }
        return nil
    }
}
  • 이미지 공유하기
let vc = UIActivityViewController(activityItems: [image], applicationActivities: nil)
vc.excludedActivityTypes = [.saveToCameraRoll] // 이 코드가 없다면, 공유하기 화면에서 "save image"를 누를시 crash발생
present(vc, animated: true)
  • save image기능을 넣으려면, info.plist에 아래 시스템 팝업 정보를 추가해야 가능

  • Storyboard

  • 전체 코드
//
//  ViewController.swift
//  TestCapture
//
//  Created by 김종권 on 2020/11/23.
//

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var myView: UIView!

    override func viewDidLoad() {
        super.viewDidLoad()

    }

    @IBAction func btnShare(_ sender: Any) {
        guard let image = myView.transfromToImage() else {
            return
        }
        let vc = UIActivityViewController(activityItems: [image], applicationActivities: nil)
        vc.excludedActivityTypes = [.saveToCameraRoll] //
        present(vc, animated: true)
    }
}

extension UIView {
    func transfromToImage() -> UIImage? {
        UIGraphicsBeginImageContextWithOptions(bounds.size, isOpaque, 0.0)
        defer {
            UIGraphicsEndImageContext()
        }
        if let context = UIGraphicsGetCurrentContext() {
            layer.render(in: context)
            return UIGraphicsGetImageFromCurrentImageContext()
        }
        return nil
    }
}
Comments