1. UI Image Picker Controller
1. ์ด ๋์ ๋ฅ๋ ฅ
์ด ๊ฐ์ฒด๋ ๋ญ ํ ์ ์๋ ๋์ผ๊น์? ๊ณต์ ๋ฌธ์์ ๋ต์ด ์์ฃ ํญ์ ...
1. ์ฌ์ง์ ์ง์ ์ฐ์ด์ ๋ถ๋ฌ์ค๊ธฐ
2. ๋์์์ ์ง์ ์ฐ์ด์ ๋ถ๋ฌ์ค๊ธฐ
3. ์ฌ์ง ๋๋ ์์์ ์จ๋ฒ์์ ๊ฐ์ ธ์ค๊ธฐ
ํฌ๊ฒ ์ด ์ธ ๊ฐ์ง๋ฅผ ํ๋ ๋์ ๋๋ค.
2. ์ฌ๋๋ค์ด ๋ณดํตํ๊ณ ์ถ์ดํ๋ ๊ฒ๋ค
๊ทธ๋ผ ๋ณดํต ์ ํฌ๊ฐ ์ ๋์ ์ ๋ฅ๋ ฅ์ ์ด๋ป๊ฒ ์ด์ฉํ๋ ค๊ณ ํ์ฃ ? ๋ณดํต์ ๊ฒฝ์ฐ :
1. ์ ์ ๊ฐ ์ํ๋ ์ฌ์ง ๋๋ ์์์ ์ฐ์ด์ ์ ๋ก๋ ํ๊ธฐ
2. ์ฌ์ง, ์์์ด ์๋ ๊ฐค๋ฌ๋ฆฌ์์ ์์ ์์ฌ๋ก ๊ณจ๋ผ์ ํ๋ ๋๋ ์ฌ๋ฌ๊ฐ๋ฅผ ์ ๋ก๋ ํ๊ธฐ๊ฐ
๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ ๋ ๊ฐ์ง ๊ฒฝ์ฐ๋ก ๋๋ ์ ์๊ฒ ๋ค์ !! ๊ทธ๋ ์ฅฌ?
1์ ๋์ ํด ๋ด ์๋ค ๊ทธ๋ฌ๋ฉด. ์ด๊ฑฐ ํ๋ฉด ๋ฐ์ ์ ๋ณตํ๋ ๊ฑฐ์์. ๋งค์ฐ ๊ฐ๋จํ๋ ๋ ์ธ ๊ณ ~
ํญ์ ์ฒ๋ฆฌ๊ธธ๋ ๊ณต์ ๋ฌธ์๋ถํฐ์ ๋๋ค. ๊ทผ๋ฐ ๋ฐ์ ์ค๋ช ์ด ์์ผ๋ ์ ์ฝ์ด๋ ๋ผ์ !!
์ฒซ ๋ฒ์งธ๋ก ๋ ์ฌ๊ฒจ ๋ณผ ์ ์, ์๊ฐ UI Navigation Controller๋ฅผ ์์ํ๊ณ ์๋ค๋ ์ ์ด์์. ์์(A:B)์ A is B ๊ด๊ณ๋ก ๋ณด๋ฉด, ์ด ์ด๋ฏธ์ง ํผ์ปค ์ปจํธ๋กค๋ฌ๋ ๋ค๋น๊ฒ์ด์ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ก์์ ๋ฐ์ดํฐ์ ๋ฉ์๋๋ค์ ํ์๋ก ํ๋ค๋ ๊ฑฐ์์.
3. <1๋ฒ ๋ฏธ์ > ์ฐ์ด์ ๊ฐ์ ธ์ค๊ธฐ์ ์ ์ฐจ
import UIKit
class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
var photoPicker : UIImagePickerController!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
@IBAction func takePhotoOrMovie(){
//
photoPicker = UIImagePickerController( )
// 1๋ฒ.
if UIImagePickerController.isSourceTypeAvailable(.camera){
// 2๋ฒ.
photoPicker.sourceType = .camera
// 3๋ฒ.
for mediaType in ["public.image", "public.movie"] :
if UIImagePickerController.availableMediaTypes(for: .camera)!.contains(mediaType)
photoPicker.mediaTypes.append( mediaType )
// 4๋ฒ.
photoPicker.delegate = self
photoPicker.allowsEditing = true
present(photoPicker, animated: true, completion: nil)
}
else {
makeAlert(title: "์นด๋ฉ๋ผ ์ฌ์ฉ๋ถ๊ฐ", content: "๊ธฐ๊ธฐ์ ์นด๋ฉ๋ผ์ ์ ๊ทผํ ์ ์์ต๋๋ค. ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ ํํด์ฃผ์ธ์.")
}
}
1. ์ฌ์ฉํด์ผ ํ๋ ์ถ์ฒ๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํ์ง ํ์ธํ์ธ์. ( //1๋ฒ ์ฐธ๊ณ )
์๋ ์นด๋ฉ๋ผ๊ฐ ์ฌ์ฉ ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ๊ฐ ์ด๋จ๋๊ตฌ์?
์ ๋ ์ด๋ ๊ฒ ์๊ฐํด์, ์์ผ ํ๋ ํ๋ ๋ฐ์ ธ์ผํ๋ ํ๋๋ฐ, ๋ ํ ๋ ๋ง์์ต๋๋ค. ๊ณต์ ๋ฌธ์์์๋ 1๋ฒ ์ ์ฐจ๊ฐ ํ์ํ ์ด์ ๋ฅผ ์ค๋ช ํด์ฃผ๊ณ ์์ต๋๋ค. ์๋ฐ์ต๋๋ค.
๊ณต์ ๋ฌธ์ says
" ์นด๋ฉ๋ผ, ์จ๋ฒ, ์ฌ์ง ์ถ์ฒ๊ฐ ์กด์ฌํ์ง ์๊ฑฐ๋ ์ฌ์ฉ๋ถ๊ฐ๋ฅ ํ ์ ์๋ค. ๋ผ๋ผ๋ ๋ง์ด์ผ ... ์จ๋ฒ์ ๊ฐ์ ์ฌ์ง์ ๊ฐ์ ธ์ค๊ฒ ๋ค๊ณ ํ๋๋ฐ, ๊ฑฐ๊ธฐ ์๋ฌด๋ฐ ์ฌ์ง์ด ์์ ๊ฒฝ์ฐ๋ ์์๊ณ ( ์ด๋ด ๊ฒฝ์ฐ ๋๋ .isSourceTypeAvailable๊ฐ์ false๋ฅผ ์ง์ ํ์ง) ,,, ์ ๋,,, ์นด๋ฉ๋ผ๊ฐ ๋ค๋ฅธ ์ฑ์์ ์ด๋ฏธ ์ฌ์ฉ์ค์ด์ด์, ์ด ์ฅ์น๋ฅผ ์์ฒญํ ์ฑ์ ํ ๋นํ ์ ์๋ ๊ฒฝ์ฐ๋ ์์์ด. "
" ๊ทธ๋ฌ๋๊น, ๋๊ฐ ์ฌ์ฉํ๋ ค๋ ๋ฏธ๋์ด ์๋ฃ ์ถ์ฒ๊ฐ ์ฌ์ฉ๊ฐ๋ฅํ ์ง ๊ผญ ๋ฌผ์ด๋ ์ ์ฐจ๋ฅผ ๊ฑฐ์ณ, ์์ ๊ฒฝ์ฐ๋ ์ ํธ๋ค๋งํ๊ณ "
" ๋ด๊ฐ ๋ฒ์ด๊ณ ๊ณง ์ง๋ฆฌ์ผ. ๊ฑ ๋ฅ์น๊ณ ๋ฐ๋ฅด๋ ด "
๊ทธ๋ ๋ค๋ค์. 1 ์ ์ฐจ๋ฅผ ๋นผ๋์ง ๋ง์๋ค. ์ฐ๋ฆฌ ...
**์ฃผ์**
> ์จ๋ฒ?๊ณผ ์ฌ์ง? ๋ญ๊ฐ ๋ค๋ฅธ๋ฐ?
> "์ฌ์ง", "์จ๋ฒ"์ ์ฐจ์ด๋ ์ฌ๋ฌ๋ถ์ด ๊ฐค๋ฌ๋ฆฌ์ ๋ค์ด๊ฐ๋ณด๋ฉด ๋์ถฉ ์ ์ ์์ด์.
> ์ฌ์ง, ์์์ด ์ต๊ทผ ๊ฒ ๋ถํฐ ์ค๋๋ ๊ฒ ์์ผ๋ก ์ญ ์๋ ๋ฐ๋ฉด, ์จ๋ฒ์, ์ฌ์ง, ์์์ด ์ธ๋ฌผ ๋ณ ํ ๋ง๋ณ๋ก ๋๋์ด์ ธ ์๋ ์นดํ ๊ณ ๋ฆฌ ์ค์ฌ์ ์ฌ์ง ์ฒฉ์ด์์.
2. ์ถ์ฒ๊ฐ ์ฌ์ฉ๊ฐ๋ฅํ ๊ฒฝ์ฐ, ์ด๋ฏธ์ง ํฝ์ปค ์ปจํธ๋กค๋ฌ์ ์ถ์ฒ ์์ฑ์ ์์ ํ๊ฒ ์ง์ ํด์ฃผ๊ธฐ. //2๋ฒ ์ฐธ๊ณ
3. ์ฌ์ฉํ๊ธฐ๋ฌ ํ ์ถ์ฒ์ ๋ํด, ์ด๋ค ๋ฏธ๋์ด ํ์ ์ ๊ฐ์ ธ์ค๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ ์ง ๋ช ์ํด์ฃผ๊ธฐ. //3๋ฒ ์ฐธ๊ณ
// 3๋ฒ.
for mediaType in ["public.image", "public.movie"] :
if UIImagePickerController.availableMediaTypes(for: .camera)!.contains(mediaType)
photoPicker.mediaTypes.append( mediaType )
๋ ๋ฏธ๋์ด ํ์ ?? ๋ ๋ญํ๋ผ๋ ๊ฑฐ์ผ?? ์ง์ง ๊ท์ฐฎ์ฃ ?
์ฌ๋ฌ๋ถ ์นด๋ฉ๋ผ๋ก ์ฐ์ด์ ๊ฐ์ ธ์ฌ ์ ์๋ ๋ฏธ๋์ด ํ์ ? ๋ญ๊ฐ ์์ฃ ? ์ฌ์ง ๋ง๊ณ ๋ญ ์๋????
์ฌ๋ฌ๋ถ ๋์์๋ ์์ฃ .
์๋ฅผ ๋ค์ด, ์ ํฌ๋ธ, ํฑํก ๋น์ทํ๊ฒ ์์์ ์ฌ๋ ค์ผํ๋ ์ฑ์ด๋ฉด, ํฝ์ปค์์ ์ค์ง ๋์์ ๋ฏธ๋์ด ํ์ ๋ง ํ์ฉํด์ผ๊ฒ ์ฃ .
๋ง์ฝ, ์ฌ์ง๋ง ์ฌ๋ฆฌ๋ ๊ฑธ๋ก ํ์ ์ง์ด์ผํ๋ฉด ์ด๋ป๊ฒ ํ ๊น์? ํฝ์ปค์๊ฒ ์ด๋ฐ ๋ด์ฉ์ ๊ผญ ์๋ ค์ฃผ์ด์ผ ํฉ๋๋ค.
ํฝ์ปค์ผ, ์นด๋ฉ๋ผ๊ฐ ๋ฏธ๋์ด์ ์ถ์ฒ๊ณ , ์นด๋ฉ๋ผ๋ฅผ ์ฐ๋ ์ด ์ฑ์์๋ :
1. ์ฌ๊ธฐ์ ๋์์๋ง ๊ฐ์ ธ์ค๋ฉด ๋ผ
2. ์ฌ๊ธฐ์ ์ฌ์ง๋ง ๊ฐ์ ธ์ค๋ฉด ๋ผ
3. ์ฌ์ง ๋์์ ๋ชจ๋ ๊ฐ์ ธ์๋ ๋ผ
์ด๋ ๊ฒ ๋ค์ํ ๊ฒฝ์ฐ์ ์๊ฐ ์์ฃ ?
๊ทธ๋์ ํ์ํ ๊ฑฐ๋๊น, ์ผ๋จ์, ๋ค์ ๋ง์์ ๊ฐ๋ค๋ฌ๊ณ , ์ด๋ถ๋ถ๋ ๋ช ์๋ฅผ ํด์ค์๋ค.
์ ์์ ์ฝ๋ ์์๋ ๋ค ์ฐ๊ฒ ๋ค๊ณ ๋ฐํ ๊ฑฐ์ฃ .
์ฌ๋ฌ๋ถ, ์ด์ ๋ง์ง๋ง ์ ์ฐจ์์. ์ด์ ์ด๋ป๊ฒ ํด์ผ์ฃ ?
๋ญ ์ด๋กํด์? ๋ง๋ ๊ฑฐ ๋์์ผ์ฃ !!
4. ์ด์ ํฝ์ปค๋ทฐ๋ฅผ ๋์์ผ ํฉ๋๋ค.
* ์ค๋น ์์
> ํฝ์ปค๋ทฐ์์ ๊ณ ๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์จ์ผํ๋๊น, ํ์ฌ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ฅผ ํฝ์ปค ๋ทฐ ์ปจํธ๋กค๋ฌ์ delegate๋ก ์ง์ ํฉ๋๋ค.
> .allowsEditing์ ๊ณ๋ค๋ฆฌ ์ต์ ์ค์ ์ธ๋ฐ์, ์ฌ์ง๊ณผ ์์์ ์ฐ์ ํ, ์ด๊ฒ์ ํธ์งํ๋ ์ ์ฐจ๋ฅผ ํ์ฉํ ์ง๋ฅผ ์ ํ๋ ๊ฒ๋๋ค. ํ ๋ฒ true, false ๋ฐ๊ฟ ๊ฐ๋ฉด์ ์คํํด๋ณด์ธ์.
> ์ฌ๋ฌ๋ถ ๋ง์ง๋ง, ์ด์ ์ด๋ ๊ฒ ๋ง๋ ํฝ์ปค ๋ทฐ ์ปจํธ๋กค๋ฌ๋ฅผ present ๋ณด์ฌ์ฃผ์ธ์ !!
// 4๋ฒ.
photoPicker.delegate = self
photoPicker.allowsEditing = true
present(photoPicker, animated: true, completion: nil)
๋๋์ด, ์ฒซ ๋ฒ์งธ ๋ฏธ์ ์ ์์ฑํ์ด์. ๋ญ์์ฃ ?
์ ํฌ๋ 1. ์ ๋ง๋ฌด๋ฆฌ ํ์ต๋๋ค. ๋์์, ์ฌ์ง ์ฐ์ด์ ์ฌ๋ฆฌ๊ธฐ !!
* ๊ธด๊ธ ๊ณต์ง <์์ด ํจ๋ ์ฃผ์> *
present(photoPicker, animated: true, completion: nil)
์ ํฌ๊ฐ ํฝ์ปค ์ปจํธ๋กค๋ฌ๋ฅผ ๋ง๋ค์์ ๋, ์ด๋ฅผ ํ๋ฉด์ ๋์ฐ๋ ๋ฐฉ์์ผ๋ก present ๋ฐฉ์, ์ฆ, ์๋ก ๋ง๋ ๋ทฐ ์ปจํธ๋กค๋ฌ๋ฅผ full screen์ผ๋ก ๋์ฐ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ต๋๋ค. ๋คํํ, ์นด๋ฉ๋ผ๋ก ๋์์ ์ฌ์ง์ ๊ฐ์ ธ์ค๋ ๊ฒฝ์ฐ์ฌ์, ์์ง ๊น์ง๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
์์ดํจ๋์์๋ ์ฌ์ง๊ณผ ๋์์์ ์ฐ์ด์ ๊ฐ์ ธ์ค๋ ์ด๋ฏธ์ง ํฝ์ปค ์ปจํธ๋กค๋ฌ๋ present ๋ฐฉ์์ผ๋ก ์งํํ๋ผ๊ณ ๊ฐ์ด๋๋ผ์ธ์ ๋์์์ผ๋๊น์.
๋ค๋ง, ๋ ๋ฒ์งธ ๋ฏธ์ , ํฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ํฌํ ์จ๋ฒ์ ์ฌ์งํ๋ ๊ฒฝ์ฐ์, ๋ญ ์กฐ์ฌํด์ผํ์ฃ ? ์์ ์์ด์ !!
๋ฐ๋ก ์ด๋ฏธ์ง ํผ์ปค ์ปจํธ๋กค๋ฌ๋ฅผ ๋ง๋ค์์ผ๋ฉด, ์ด ํฝ์ปค ์ปจํธ๋กค๋ฌ๋ฅผ must use popover ๋ฌด ์ ๊ถ ํ์ค๋ฒ ๋ฐฉ์์ผ๋ก ๋์์ผ ํฉ๋๋ค.
๋ฐ์์ ๋์ ํ ํ์คํธ์์ ๊ผญ ๊ธฐ์ตํฉ์๋ค !! ์์ดํจ๋์ธ์ง ํ์ธํ๊ณ , ํ ์ค๋ฒํ๋ค !!
< 2๋ฒ ๋ฏธ์ > ๊ฐ๋๋ค
์ฐ๋ฆฐ ์ด์ ์ 2๋ฒ์ ์ ๋ณตํ ๊ฑฐ์์. ๊ฐค๋ฌ๋ฆฌ์์ ์์๊ณผ ์ฌ์ง์ ์ํ๋ ๊ฐฏ์๋งํผ ๊ฐ์ ธ์ค๊ธฐ.
( ๋งค์ฐ ... ์ง์น๋ค์ .. ํ ..
์ฌ๋ฐ๋ค ์ฌ๋ฐ๋ค ์ฌ๋ฐ๋ค ์ฌ๋ฐ๋ค ... ์ผ๋จ ์ค์ค๋ก๋ฅผ ์์ฌ๋ณด๊ณ ๊ณ์ํ๊ฒ ์ต๋๋ค. ํ๋ณตํด์ ์๋ ๊ฒ ์๋๋ผ, ์์ด์ ํ๋ณตํ ๊ฑฐ ์๋์ ๊ทธ์ตธ? )
๊ทธ๋ฐ๋ฐ ... ๋ฌธ์ ๊ฐ ์๊ฒผ์ต๋๋ค. 2๋ฒ ๋ฏธ์ ์ UIImagePickerController๋ฅผ ์ด์ฉํด์, ๊ตฌํํ ์ ์์ต๋๋ค.
UIImagePickerController๋ ํ ๋ฒ์ ํ ์์ ๋๋ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๊ฒ ๊ตฌํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์. ๋ฌผ๋ก ์ฅ์ ์ ์๋๋ฐ, ๋ฐ๋ก ํ๋์ฉ ๊ฐ์ ธ์ค๋ฉด์, ํธ์ง์ ํ๊ณ ๊ฐ์ ธ์ฌ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ์ํฉ์ ๋ฐ๋ผ์๋ ์ด ํด๋์ค๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํด๋ ๋๊ฒ ์ง๋ง, ๋ง์ฝ, ์ฑ ํน์ฑ์, ์ฌ๋ฌ ๊ฐ์ ์ด๋ฏธ์ง๋ฅผ ํ ๋ฒ์ ๊ฐ์ ธ์ค๋ ๊ฒ ๋น์ฐํ๋ฉด, ์ด๊ฑธ ์ฐ๋ฉด ์ ๋๋ค๋ ,,, ๊ทธ๋ฐ ์๊ธฐ ์ํฉ์ ๋๋ค.
์ ํ์์ ์ ์ด๋ ๊ฒ ํ์ง ์๋ฌธ์ด ๋ญ๋๋ค๋ง, ๋ณ์ ์์ด third party ์ 3์ API ์ฆ, ๋ค๋ฅธ ๋๋ํ์ ๋ถ๋ค์ด ์ฌ๋ฌ๊ฐ ์ด๋ฏธ์ง, ์์์ ํฝํด์ฌ ์ ์๋๋ก ๋ง๋ค์ด์ ์ธํฐ๋ท์ ์นํ ๊ณต๊ฐํ API๋ฅผ ์ฌ์ฉํ๋ ์ ๋ฐ์ ์์ต๋๋ค. ์๋๋ฉด ๋ญ ์ง์ ๊ฐ๋ฐํ์ ๋ ๋๊ตฌ์.
๊ทธ๋ฐ๋ฐ, ์ ๋ ์์ง ๊ทธ์ ๋ ๋ ๋ฒ ๋ฃจ๊ฐ ์๋์ง๋ผ, ์ฐ์ ์จ๋ ํํฐ API๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ ํํ ๊ฑฐ์์ !! ์ด API์ ๋ํด์๋, ๋ค์ ๊ฒ์๋ฌผ์์ ๋ค๋ฃจ๋๋ก ํ ๊ฒ์ !!
์ด ๊ฒ์๋ฌผ์ ์ฐธ๊ณ ํด ์ฃผ์ธ์.