티스토리 뷰

Xcode(버전11.3)를 UIImagePickerController 카메라와 포토 라이브러리 앱v2 만든다:D

아래 링크는 이전에 만들어봤던 예제이다.

 

[iOS/swift] UIImagePickerController 카메라와 포토 라이브러리(사진첩) 앱 만들기

Xcode(버전11.3)를 UIImagePickerController 카메라와 포토 라이브러리 앱 만든다:D 안타깝게도 iOS 시뮬레이터에서는 카메라가 지원이 되지 않는다..ㅜㅜ iOS 개발자 프로그램을 등록하면 가능하니 우선 공부를..

moonibot.tistory.com

이번에는 ImageView와 Button은 각각 3개를 추가한다.

Button은 '사진 촬영'. '사진 불러오기' , '초기화'로 구성한다.

첫번째 이미지를 불러오면 첫번째 ImageView에, 두번째 이미지는 두번째 ImageView에, 세번째 이미지는 세번째 ImageView에..

네번째 이미지를 불러오면 다시 첫번째 lmageView부터 보여준다.

그리고 '초기화' Button을 누르면 모든 ImageView의 이미지가 삭제되도록 구현한다.

 

 

 

- 스토리보드 화면 구성

1) ImageView

 

 

 

- 스토리보드 화면 구성

2) Button

'사진 촬영', '사진 불러오기', '초기화'

 

 

 

- 아웃렛 변수 추가

ImageView -> 'imgView1'

ImageView -> 'imgView2'

ImageView -> 'imgView3'

 

 

 

- 액션 함수 추가

'사진 촬영' Button -> 'btnCaptureImageFromCamera'

'사진 불러오기' Button -> 'btnLoadImageFromLibrary'

'초기화' Button -> 'btnImgViewReset'

 

 

 

전체 소스 보기

//
//  ViewController.swift
//  day191228_CameraPhotoLibray2
//
//  Created by 무니 on 2019/12/28.
//  Copyright © 2019 com.mooni. All rights reserved.
//

import UIKit
import MobileCoreServices // 다양한 타입들을 정의해 놓은 헤더 파일 추가

class ViewController: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate {

    var numImage = 1 // 이미지 뷰를 가르키는 변수
    
    @IBOutlet var imgView1: UIImageView!
    @IBOutlet var imgView2: UIImageView!
    @IBOutlet var imgView3: UIImageView!
    
    // UIImagePickerController 인스턴스 변수 생성
    let imagePicker: UIImagePickerController! = UIImagePickerController()
    var flagImageSave = false // 사진 저장 여부를 나타낼 변수
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }

    // 사진 촬영
    @IBAction func btnCaptureImageFromCamera(_ sender: UIButton) {
        
        // 만일 카메라를 사용할 수 있다면
        if (UIImagePickerController.isSourceTypeAvailable(.camera)) {
            flagImageSave = true // 사진 저장 플래그를 true로 설정
            
            imagePicker.delegate = self // 이미지 피커의 델리케이트를 self로 설정
            imagePicker.sourceType = .camera // 이미지 피커의 소스 타입을 Camera로 설정
            imagePicker.mediaTypes = [kUTTypeImage as String] // 미디어 타입을 kUTTypeImage로 설정
            imagePicker.allowsEditing = false // 편집을 허용하지 않음
            
            // 뷰 컨트롤러를 imagePicker로 대체
            present(imagePicker, animated: true, completion: nil)
        } else {
            // 카메라를 사용할 수 없을 때 경고 창 출력
            myAlert("Camera inaccessable", message: "Application cannot access the camera.")
        }
    }
    
    // 사진 불러오기
    @IBAction func btnLoadImageFromLibrary(_ sender: UIButton) {
        if (UIImagePickerController.isSourceTypeAvailable(.photoLibrary)) {
            flagImageSave = false
            
            imagePicker.delegate = self
            imagePicker.sourceType = .photoLibrary // 이미지 피커의 소스 타입을 PotoLibrary로 설정
            imagePicker.mediaTypes = [kUTTypeImage as String]
            imagePicker.allowsEditing = true // 편집을 허용
            
            present(imagePicker, animated: true, completion: nil)
        } else {
            myAlert("Photo album inaccessable", message: "Application cannot access the photo albm.")
        }
    }
    
    // 초기화
    @IBAction func btnImgViewReset(_ sender: UIButton) {
        imgView1.image = nil
        imgView2.image = nil
        imgView3.image = nil
        numImage = 1
    }
    
    // 사진 촬영이나 선택이 끝났을 때 호출되는 델리게이트 메서드
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        // 미디어 종류 확인
        let mediaType = info[UIImagePickerController.InfoKey.mediaType] as! NSString
        // 미디어가 사진이면
        if mediaType.isEqual(to: kUTTypeImage as NSString as String){
            // 사진을 가져옴
            let captureImage = info[UIImagePickerController.InfoKey.originalImage] as! UIImage
            
            if flagImageSave { // flagImageSave가 true일 때
                // 사진을 포토 라이브러리에 저장
                UIImageWriteToSavedPhotosAlbum(captureImage, self, nil, nil)
            }
            // 가져온 사진을 해당하는 이미지 뷰에 넣기...
            if numImage == 1 {
                imgView1.image = captureImage // 가져온 사진을 이미지 뷰에 출력
                numImage = 2
            } else if numImage == 2 {
                imgView2.image = captureImage // 가져온 사진을 이미지 뷰에 출력
                numImage = 3
            } else {
                imgView3.image = captureImage // 가져온 사진을 이미지 뷰에 출력
                numImage = 1
            }
        }
        // 현재의 뷰(이미지 피커) 제거
        self.dismiss(animated: true, completion: nil)
    }
    
    // 사진 촬영이나 선택을 취소했을 때 호출되는 델리게이트 메서드
    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        // 현재의 뷰(이미지 피커) 제거
        self.dismiss(animated: true, completion: nil)
    }
    
    // 경고 창 츨력 함수
    func myAlert(_ title: String,message: String) {
        // Alert show
        let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertController.Style.alert)
        let action = UIAlertAction(title: "Ok", style: UIAlertAction.Style.default, handler: nil)
        alert.addAction(action)
        self.present(alert, animated: true, completion: nil)
    }
    
}



 

 

 

시뮬레이터 결과 화면

[iOS/swift] UIImagePickerController 카메라와 포토 라이브러리(사진첩) 앱v2 만들기 - 사진 불러오기 기능 ImageView1

 

[iOS/swift] UIImagePickerController 카메라와 포토 라이브러리(사진첩) 앱v2 만들기 - 사진 불러오기 기능 ImageView2
[iOS/swift] UIImagePickerController 카메라와 포토 라이브러리(사진첩) 앱v2 만들기 - 사진 불러오기 기능 ImageView3
[iOS/swift] UIImagePickerController 카메라와 포토 라이브러리(사진첩) 앱v2 만들기 - 사진초기화 기능 ImageView 초기화

시뮬레이터에서는 카메라 사용이 되지 않아 카메라 사용 권한 설정은 하지 않아서 권한 설정에 대한 것은 다음에 포스팅할 예정:D 

 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함