★ 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)
}
}