적당한 고통은 희열이다

- 댄 브라운 '다빈치 코드' 중에서

Project/ToyProject_Couple App

[Swift iOS] UIImagePickerController로 사진첩에서 사진 가져오기

hongssup_ 2021. 3. 11. 15:30
반응형

목표 : 라이브러리에서 사진을 가져와 배경화면에 띄우기. 

 

가장 먼저 해야 할 일은 1. 리소스 접근 권한 설정

Info.plist 파일에서 Information Property List 에 새로운 항목으로 [Privacy - Photo Library Usage Description] 키를 추가

: 앱이 사용자의 카메라나 앨범 리소스에 접근하기 위해 필요한 권한. 

(카메라를 추가하고 싶다면 [Privacy - Camera Usage Description] 추가해면 된다.)

1. 사진첩을 띄울 UIButton() 만들기

2. 버튼 터치 시 실행될 uploadPhoto() 메서드 만들고 버튼 이벤트에 추가하기

3. extension으로 UIImagePickerControllerDelegate와 UINavigationControllerDelegate 속성 추가해주기

4. 받아온 사진을 화면에 띄우기

import Foundation
import UIKit

class ViewController: UIViewController {
	
    let photoButton = UIButton(frame: .zero) //1 버튼 위치 및 크기는 addConstraints()에서 알아서 설정하기
    var imageView = UIImageView()
    
    override func viewDidLoad() {
    	super.viewDidLoad()
        setupViews()
        addConstraints()
    }
    
    func setupViews() {
    	photoButton.setTitle("사진", for: .normal)
        photoButton.addTarget(self, action: #selector(uploadPhoto), for: .touchUpInside) //2
        
        view.addSubview(imageView)
        view.addSubview(photoButton)
        view.subviews.forEach { view in
            view.translatesAutoresizingMaskIntoConstraints = false
            view.sizeToFit()
        }
    }
      
    func addConstraints() {
    	let safeArea = view.safeAreaLayoutGuide
        NSLayoutConstraint.activate([
            // 버튼과 imageView의 위치 및 크기 설정
            imageView.heightAnchor.constraint(equalTo: view.heightAnchor),
            imageView.centerXAnchor.constraint(equalTo: view.centerXAnchor)
        ])
    }
    //2
    @objc func uploadPhoto() {
    	let imagePicker = UIImagePickerController()
        imagePicker.sourceType = .photoLibrary
        imagePicker.delegate = self //3
        // imagePicker.allowsEditing = true 
        present(imagePicker, animated: true)
    }
}

//3
extension ViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        if let pickedImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
            imageView.contentMode = .scaleAspectFit
            imageView.image = pickedImage //4
        }           
        dismiss(animated: true, completion: nil)
    }
        
    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        dismiss(animated: true, completion: nil)
    }    
}
728x90
반응형