본문 바로가기
아이폰 개발/Swift

swift UIImagePickerController 예제 feat : 메모 쓰기, 읽기

by 인생여희 2021. 3. 25.

swift UIImagePickerController 예제 feat : 메모 쓰기, 읽기

 

완성된 화면

 

 

 

 

스토리 보드

 

 

 

[1] 메모 쓰기 - 사진 버튼 클릭했을때 작동하는 로직

MemoFormVC.swift


import UIKit

//피커뷰 델리게이트 + TextViewDelegate 프로토콜 추가
class MemoFormVC: UIViewController,UIImagePickerControllerDelegate,UINavigationControllerDelegate, UITextViewDelegate {

    var subject:String! //메모 제목
    
    //내용
    @IBOutlet weak var contents: UITextView!
    
    //이미지 미리보기
    @IBOutlet weak var preview: UIImageView!
    
    
    override func viewDidLoad() {
        super.viewDidLoad()

        self.contents.delegate = self
        
    }
    
    //저장
    @IBAction func save(_ sender: Any) {
        
        //내용을 입력하지 않은경우 경고
        guard self.contents.text?.isEmpty == false else {
        let alert = UIAlertController(title: nil, message: "내용을 입력해주세요", preferredStyle: .alert)
        
        alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
            
        self.present(alert, animated: false, completion: nil)
        return
            
        }
        
        
        //MemoData 객체를 생성하고 데이터담기
        
        let data = MemoData()
        
        data.title = self.subject
        data.contents = self.contents.text
        data.image = self.preview.image
        data.regdate = Date()
        
        
        //앱 델리게이트 객체를 읽어 온다음 memolist 배열에 MemoData 객체 추가
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        appDelegate.memolist.append(data)
        
        
        self.navigationController?.popViewController(animated: true)
        
    }
    
    //사진버튼 클릭
    @IBAction func pick(_ sender: Any) {
        let picker = UIImagePickerController()
        
        //이미지 피커 컨트롤러는 델리게이트 패턴 기반으로 동작합니다.
        picker.delegate = self
        picker.allowsEditing = true
        
        //알림창 객체 생성
        let alert = UIAlertController(title: nil, message: "이미지를 가져올 곳을 선택해주세요.", preferredStyle: .actionSheet)
        
        //카메라
        let camera = UIAlertAction(title: "카메라", style: .default) { (_) in
            
            if UIImagePickerController.isSourceTypeAvailable(.camera){
                picker.sourceType = .camera
                //이미지 피커 화면에 표시
                self.present(picker, animated: false, completion: nil)
            }
        }
        
        //저장앨범
        let savedAlbum = UIAlertAction(title: "저장앨범", style: .default) { (_) in
            picker.sourceType = .savedPhotosAlbum
            //이미지 피커 화면에 표시
            self.present(picker, animated: false, completion: nil)
        }
        
        //사진 라이브러리
        let photoLibray = UIAlertAction(title: "사진 라이브러리", style: .default) { (_) in
            
            //이미지 피커 화면에 표시
            self.present(picker, animated: false, completion: nil)
        }
        
        //취소
        let cancel = UIAlertAction(title: "취소", style: .cancel, handler: nil)
        
        //버튼을 컨트롤러에 등록
        alert.addAction(camera)
        alert.addAction(savedAlbum)
        alert.addAction(photoLibray)
        alert.addAction(cancel)
        
        //알림창 실행
        self.present(alert, animated: false, completion: nil)
        
    }
    
    // MARK:- 이미지 피커 델리게이트
    //이미지 선택을 완료했을때 호출
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        
        //선택된 이미지를 미리보기에 표시
        self.preview.image = info[UIImagePickerController.InfoKey.editedImage] as? UIImage
        
        //이미지 피커 컨트롤러 닫음
        picker.dismiss(animated: false, completion: nil)
        
    }
    
    // MARK:- UITextViewDelegate
    //텍스트 뷰의 내용이 변경될 때마다 호출됨
    func textViewDidChange(_ textView: UITextView) {
        
        //내용의 15자리까지 읽어 subject 변수에 저장
        let contents = textView.text as NSString
        let length = (contents.length > 15) ? 15 : contents.length
        self.subject = contents.substring(with: NSRange(location: 0, length: length))
        
        //네비게이션 타이틀에 표시
        self.navigationItem.title = subject
    }
    

}

 

[2] 메모 읽기

MemoReadVC.swift

 

import UIKit

class MemoReadVC: UIViewController {

    //콘텐츠 데이터를 저장하는 변수
    var param:MemoData?
    
    @IBOutlet weak var subject: UILabel!
    
    @IBOutlet weak var contents: UILabel!
    
    
    @IBOutlet weak var img: UIImageView!
    
    override func viewDidLoad() {
        super.viewDidLoad()

        //제목, 내용, 이미지 출력
        self.subject.text = param?.title
        self.contents.text = param?.contents
        self.img.image = param?.image
        
        //날짜 포캣 변환
        let formatter = DateFormatter()
        formatter.dateFormat = "dd일 HH:mm분에 작성됨"
        let dateString = formatter.string(from: (param?.regdate)!)

        //네비게이션 타이틀에 날짜 표시
        self.navigationItem.title = dateString
    }

}

 

 

MyMemory.zip
0.75MB

 

MyMemory.zip
0.76MB