ImagePickerControllerで画像を選択する(Swift4.2)
# Swift 4.2
Swift3の記事はこちら
UIImagePickerControllerで画像の選択
iPhoneのフォトライブラリから画像を取得するサンプルプログラムです。
フォトライブラリから画像を選択するために、プロジェクトの info.plistにフォトライブラリを使用する旨を記述します。
これを書いておかないとUIImagePickerControllerは使えません。
キーの値は以下の値を使います。
NSPhotoLibraryUsageDescription
TypeはStringでValueの中に使用理由を書きます。
使用理由を書かないと審査の時に落とされるらしいです。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import UIKit | |
class ImagePickerViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { | |
var picker: UIImagePickerController! | |
var button: UIButton! | |
override func viewDidLoad() { | |
super.viewDidLoad() | |
view.backgroundColor = .white | |
picker = UIImagePickerController() | |
picker.delegate = self | |
picker.sourceType = UIImagePickerController.SourceType.photoLibrary | |
picker.allowsEditing = true // Whether to make it possible to edit the size etc after selecting the image | |
// set picker's navigationBar appearance | |
picker.view.backgroundColor = .white | |
picker.navigationBar.isTranslucent = false | |
picker.navigationBar.barTintColor = .blue | |
picker.navigationBar.tintColor = .white | |
picker.navigationBar.titleTextAttributes = [ | |
NSAttributedString.Key.foregroundColor: UIColor.white | |
] // Title color | |
button = UIButton() | |
button.addTarget(self, action: #selector(touchUpInside(_:)), for: UIControl.Event.touchUpInside) | |
let size = view.frame.width * 0.8 | |
button.setTitle("Push Me", for: UIControl.State.normal) | |
button.frame.size = CGSize(width: size, height: size) | |
button.titleLabel?.font = UIFont.systemFont(ofSize: 28) | |
button.center = view.center | |
button.backgroundColor = .orange | |
view.addSubview(button) | |
} | |
@objc func touchUpInside(_ sender: UIButton) { | |
// show picker modal | |
present(picker, animated: true, completion: nil) | |
} | |
// MARK: ImageVicker Delegate Methods | |
// called when image picked | |
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]) { | |
if let editedImage = info[UIImagePickerController.InfoKey.editedImage] as? UIImage { | |
button.setBackgroundImage(editedImage, for: .normal) | |
} else if let originalImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage { | |
button.setBackgroundImage(originalImage, for: .normal) | |
} | |
dismiss(animated: true, completion: nil) | |
} | |
// called when cancel select image | |
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { | |
// close picker modal | |
dismiss(animated: true, completion: nil) | |
} | |
} |