Skip to content

Instantly share code, notes, and snippets.

@KentarouKanno
Last active November 3, 2016 10:33
Show Gist options
  • Save KentarouKanno/d12c6c27fed725c70c4eadee83ae9690 to your computer and use it in GitHub Desktop.
Save KentarouKanno/d12c6c27fed725c70c4eadee83ae9690 to your computer and use it in GitHub Desktop.
UIImagePickerController

UIImagePickerController

★ Photo Albumから写真を選択する

iOS10では以下の値をplistに書かないとエラーになります。
[iOS 10] 各種ユーザーデータへアクセスする目的を記述することが必須になるようです

<key>NSPhotoLibraryUsageDescription</key>
<string>使用目的を記載します</string>
import UIKit

class ViewController: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func showImagePicker(sender: UIButton) {
        
        let sourceType:UIImagePickerControllerSourceType = UIImagePickerControllerSourceType.photoLibrary
        
        if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) {
            let imagePicker = UIImagePickerController()
            imagePicker.sourceType = sourceType
            imagePicker.delegate = self
            imagePicker.allowsEditing = true
            present(imagePicker, animated: true, completion: nil)
        } else {
            print("Not Available")
        }
    }
    
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {

        // 選択された画像
        let image = info[UIImagePickerControllerOriginalImage] as? UIImage
        print(image)
        self.dismiss(animated: true, completion: nil)
    }
    
    func imagePickerControllerDidCancel(picker: UIImagePickerController) {
        dismiss(animated: true, completion: nil)
    }
}

★ 画像をカメラロールに保存する
iOS10はPlistに使用目的を書く必要がある

import UIKit

class ViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 保存対象の UIImageView を作る
        let imageView = UIImageView(image: UIImage(named: "swift"))
        imageView.frame.size = CGSize(width: 300, height: 300)
        
        // UIImageView がタップできるようにイベント追加
        imageView.isUserInteractionEnabled = true
        imageView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.saveImage(_:))))
        
        // 画面の中心に UIImageView を配置
        imageView.center = self.view.center
        self.view.addSubview(imageView)
    }
    
    // セーブを行う
    func saveImage(_ sender: UITapGestureRecognizer) {
        
        // クリックした UIImageView を取得
        let targetImageView = sender.view! as! UIImageView
        
        // その中の UIImage を取得
        let targetImage = targetImageView.image!
        
        // UIImage の画像をカメラロールに画像を保存
        UIImageWriteToSavedPhotosAlbum(targetImage, self, #selector(self.showResultOfSaveImage(_:didFinishSavingWithError:contextInfo:)), nil)
    }
    
    // 保存を試みた結果をダイアログで表示
    func showResultOfSaveImage(_ image: UIImage, didFinishSavingWithError error: NSError!, contextInfo: UnsafeMutableRawPointer) {
        
        var title = "保存完了"
        var message = "カメラロールに保存しました"
        
        if error != nil {
            title = "エラー"
            message = "保存に失敗しました"
        }
        
        let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)
        
        // OKボタンを追加
        alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
        
        // UIAlertController を表示
        self.present(alert, animated: true, completion: nil)
    }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment