テックキャンプ134日目〜カメラ・アルバムの使用

kobasaです(´ω`*)
今回はカメラやアルバムを使用したアプリの勉強をしていました。
オリアプで使用する部分なので理解度を高めていきたいところです。

134日目の勉強内容

デバイスにアクセスする許可をとる

アプリでスマホのカメラやアルバムを使用する場合はデバイスへの許可をとるコードが必要。
複数のコントローラーで使用する可能性があるため、クラスを作成することが多い。

importPhotos
//ユーザーに許可を促す機能
class CheckPermission{
    func checkCamera(){
        PHPhotoLibrary.requestAuthorization{ (status) in
            switch(status){
            case.authorized:
                print("authorized")
            case.notDetermined:
                print("notDetermined")
            case.restricted:
                print("restricted")
            case.denied:
                print("denied")
            case.limited:
                print("limited")
            @unknown default:
                break
            }
        }
    }
}

またinfoファイルにも許可をとる記述が必要。(ないとエラーになる)

「information Property List」を選択して、+ボタンを押す。
許可を取るためのカメラとアルバムの項目を選択して追加する。
・Privacy – Photo Library Usage Description
・Privacy – Camera Usage Description
Valueに許可をとる旨を記述する。

カメラとアルバムを表示する記述

ライブラリとデリゲートを読み込む

import Photos
class ViewController: UIViewController,
UIImagePickerControllerDelegate,UINavigationControllerDelegate

許可をとるクラスのメソッドはviewDidLoad内に記述する

var checkPermission = CheckPermission()

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

カメラ・アルバムボタンを押すと呼び出されるよう設定し、共通の処理をするメソッド。
引数にはSourceTypeが渡される(カメラ・アルバムを判別するもの)

func createImagePicker(sourceType:UIImagePickerController.SourceType){
	//インスタンスを作成
	let cameraPicker = UIImagePickerController()
	//引数で受け取ったSourceType使用
	cameraPicker.sourceType= sourceType
	//デリゲートメソッドを自身に委任する
	cameraPicker.delegate= self
	//アルバムやカメラの画像の編集を許可する
	cameraPicker.allowsEditing= true
	//モーダルで写真やアルバムが立ち上がる
	self.present(cameraPicker, animated: true, completion: nil)
}

カメラ・アルバム画面が表示され、キャンセルボタンが押された時の処理。
デリゲートメソッドを使用して記述。

func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
	//画面を閉じる
	picker.dismiss(animated: true, completion: nil)
}

カメラ・アルバム画面が表示され、画像選択ボタンが押された時の処理。
デリゲートメソッドを使用して記述。

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
	if let pickerImage = info[.editedImage] as? UIImage{
	//選択された画像を画面に表示する
	backImageView.image= pickerImage
	picker.dismiss(animated: true, completion: nil)
	}
}

シェアボタンを押して画像をシェアする時の処理

 @IBActionfuncshare(_sender: Any) {
	let text = "" 
	//表示されている画像を圧縮して軽くしている。
	let image = backImageView.image?.jpegData(compressionQuality: 0.5)
	//activeVCに渡すための箱。型の宣言はAnyで無しを表す
	let item = [text, image as Any]
	let activityVC = UIActivityViewController(activityItems: item, applicationActivities: nil)
	//モーダルでシェア画面が競り上がる
	self.present(activityVC, animated: true, completion: nil) 
}

シェアボタンを押すとアクティブビューコントローラーの処理で、
画面下部からシェア画面が競り上がってくる。
textはアプリによってはハッシュタグなどを入れることもあるらしい。

今回は単純なアプリで選択した画像を表示するだけでしたが、
オリアプでは選択した画像をデータベースに残したいのでまだまだ勉強が必要ですね。

コメント

タイトルとURLをコピーしました