사진 가져오기 (UIImagePickerController)
이번에는 사진을 카메라로 찍거나 앨범에서 가져와서 image를 표현하는걸 해보자.
아래와 같이 실행된다.
======================================================================
1. ImageView 생성
1. ImageView 생성
사진을 표현하기 위한 UIImageView를 생성하고 이 ImageView를 tap 하였을 때 특정 event가 실행되게 한다.
(1) UIImageView생성
- View size에 비례하게 ImageView size를 설정하고 위치는 View의 정중앙으로 한다.
- Image 가져올 때 비율 설정을 하기 위해 contentMode 설정을 한다.
(2) UIImageView를 tap 할경우 특정 Event가 실행되도록 UITapGestureRecognizer를 추가한다.
(3) UIImageView를 tap 할 경우 반응을 할 수 있도록 isUserInteractionEnabled를 true로 설정한다.
2. UIImagePickerController 생성
(1) UIImagePickerController를 생성하기 위한 보조 함수이다.
- (2)에서 중복으로 사용되는 부분이라 이렇게 함수로 따로 빼놓았다.
- sourceType을 매개변수로 입력받아서 sourceType에 맞는 PickerController를 나타내 준다.
- PickerController를 사용하기 위해선 두가지 프로토콜(UIImagePickerControllerDelegate, UINavigationControllerDelegate)을 추가해야 한다.
(2) Image를 tap 하였을 때 UIAlertController가 나오게 하였다.
- UIImagePickerControllerSourceType의 경우 세가지로 되어 있다. 각 type이 적용 가능한지 check한 후 거기에 맞는 pickerController를 나타내게 하였다.
3. ImageView에 선택된 Image 표시하기
(1) Image가 선택되면 자동으로 실행되는 delegate 함수이다.
- info에 UIImagePickerControllerEditedImage 를 선택하여 수정된 image를 가져오게 한다.
- 화면에 표시될 image를 이렇게 가져온 image로 표시한다.
아래와 같이 실행된다.
======================================================================
1. ImageView 생성
2. UIImagePickerController 생성
3. ImageView에 선택된 Image 표시하기
======================================================================3. ImageView에 선택된 Image 표시하기
사진을 표현하기 위한 UIImageView를 생성하고 이 ImageView를 tap 하였을 때 특정 event가 실행되게 한다.
| 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 | 
class ViewController: UIViewController { 
    var sampImage: UIImageView! 
    override func viewDidLoad() { 
        super.viewDidLoad() 
        // (1) UIImageView 생성 
        sampImage = UIImageView() 
        sampImage.frame.size = CGSize(width: self.view.frame.width/3 * 2, height: self.view.frame.height / 3 * 2) 
        sampImage.center = CGPoint(x: self.view.frame.width / 2, y: self.view.frame.height / 2) 
        sampImage.contentMode = .scaleAspectFit 
        sampImage.backgroundColor = UIColor.blue 
        // (2) UIImageView에 tapGesture 추가 
        let tapGesture = UITapGestureRecognizer(target: self, action: #selector(imageTapped)) 
        self.sampImage.addGestureRecognizer(tapGesture) 
        // (3) 
        self.sampImage.isUserInteractionEnabled = true 
        self.view.addSubview(sampImage) 
    } 
} | cs | 
(1) UIImageView생성
- View size에 비례하게 ImageView size를 설정하고 위치는 View의 정중앙으로 한다.
- Image 가져올 때 비율 설정을 하기 위해 contentMode 설정을 한다.
(2) UIImageView를 tap 할경우 특정 Event가 실행되도록 UITapGestureRecognizer를 추가한다.
(3) UIImageView를 tap 할 경우 반응을 할 수 있도록 isUserInteractionEnabled를 true로 설정한다.
2. UIImagePickerController 생성
| 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 | 
class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { 
    var sampImage: UIImageView! 
    override func viewDidLoad() { 
        .... 
    } 
    // (1)UIImagePickerController 생성하는 보조 함수 
    func imgPicker(_ source: UIImagePickerControllerSourceType) { 
        let picker = UIImagePickerController() 
        picker.sourceType = source 
        picker.delegate = self 
        picker.allowsEditing = true 
        self.present(picker, animated: true, completion: nil) 
    } 
    // (2)Imgage Tap하였을 때 실행 
    @objc func imageTapped() { 
        let alert = UIAlertController(title: "선택하시오", message: nil, preferredStyle: .alert) 
        if UIImagePickerController.isSourceTypeAvailable(.camera) { 
            alert.addAction(UIAlertAction(title: "camera", style: .default, handler: { (_) in 
                self.imgPicker(.camera) 
            })) 
        } 
        if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) { 
            alert.addAction(UIAlertAction(title: "photoLibrary", style: .default, handler: { (_) in 
                self.imgPicker(.photoLibrary) 
            })) 
        } 
        if UIImagePickerController.isSourceTypeAvailable(.savedPhotosAlbum) { 
            alert.addAction(UIAlertAction(title: "savedPhotosAlbum", style: .default, handler: { (_) in 
                self.imgPicker(.savedPhotosAlbum) 
            })) 
        } 
        alert.addAction(UIAlertAction(title: "cancel", style: .cancel, handler: nil)) 
        self.present(alert, animated: true, completion: nil) 
    } 
} | cs | 
(1) UIImagePickerController를 생성하기 위한 보조 함수이다.
- (2)에서 중복으로 사용되는 부분이라 이렇게 함수로 따로 빼놓았다.
- sourceType을 매개변수로 입력받아서 sourceType에 맞는 PickerController를 나타내 준다.
- PickerController를 사용하기 위해선 두가지 프로토콜(UIImagePickerControllerDelegate, UINavigationControllerDelegate)을 추가해야 한다.
(2) Image를 tap 하였을 때 UIAlertController가 나오게 하였다.
- UIImagePickerControllerSourceType의 경우 세가지로 되어 있다. 각 type이 적용 가능한지 check한 후 거기에 맞는 pickerController를 나타내게 하였다.
3. ImageView에 선택된 Image 표시하기
| 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 | 
class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { 
    var sampImage: UIImageView! 
    override func viewDidLoad() { 
        .... 
    } 
    // UIImagePickerContrtoller 생성하는 보조 함수 
    func imgPicker(_ source: UIImagePickerControllerSourceType) { 
        .... 
    } 
    // Imgage Tap하였을 때 실행 
    @objc func imageTapped() { 
        .... 
    } 
    // (1)Image 선택이 완료되었을 때 실행되는 Delegate 함수 
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 
        if let image = info[UIImagePickerControllerEditedImage] as? UIImage { 
            self.sampImage.image = image 
        } 
        picker.dismiss(animated: true, completion: nil) 
    } 
} | cs | 
(1) Image가 선택되면 자동으로 실행되는 delegate 함수이다.
- info에 UIImagePickerControllerEditedImage 를 선택하여 수정된 image를 가져오게 한다.
- 화면에 표시될 image를 이렇게 가져온 image로 표시한다.
 
댓글
댓글 쓰기