๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

study iOS๐ŸŽ/์ฃผ์ ‘ iOS - iOS ํ…Œ๋งˆ

[์ฃผ์ ‘ iOS] UIImagePickerController ( ์‰ฌ์šด ์„ค๋ช…, easy-explained ft. cocoapods )

 

1. UI Image Picker Controller

 

1. ์ด ๋†ˆ์˜ ๋Šฅ๋ ฅ

์ด ๊ฐ์ฒด๋Š” ๋ญ˜ ํ•  ์ˆ˜ ์žˆ๋Š” ๋†ˆ์ผ๊นŒ์š”? ๊ณต์‹ ๋ฌธ์„œ์— ๋‹ต์ด ์žˆ์ฃ  ํ•ญ์ƒ ... 

 

 

1.  ์‚ฌ์ง„์„ ์ง์ ‘ ์ฐ์–ด์„œ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

2. ๋™์˜์ƒ์„ ์ง์ ‘ ์ฐ์–ด์„œ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

3. ์‚ฌ์ง„ ๋˜๋Š” ์˜์ƒ์„ ์•จ๋ฒ”์—์„œ ๊ฐ€์ ธ์˜ค๊ธฐ

 

ํฌ๊ฒŒ ์ด ์„ธ ๊ฐ€์ง€๋ฅผ ํ•˜๋Š” ๋†ˆ์ž…๋‹ˆ๋‹ค. 

 

 

2. ์‚ฌ๋žŒ๋“ค์ด ๋ณดํ†ตํ•˜๊ณ  ์‹ถ์–ดํ•˜๋Š” ๊ฒƒ๋“ค

 

 ๊ทธ๋Ÿผ ๋ณดํ†ต ์ €ํฌ๊ฐ€ ์ €๋†ˆ์˜ ์ € ๋Šฅ๋ ฅ์„ ์–ด๋–ป๊ฒŒ ์ด์šฉํ•˜๋ ค๊ณ  ํ•˜์ฃ ? ๋ณดํ†ต์˜ ๊ฒฝ์šฐ :

 

1. ์œ ์ €๊ฐ€ ์›ํ•˜๋Š” ์‚ฌ์ง„ ๋˜๋Š” ์˜์ƒ์„ ์ฐ์–ด์„œ ์—…๋กœ๋“œ ํ•˜๊ธฐ

 

2. ์‚ฌ์ง„, ์˜์ƒ์ด ์žˆ๋Š” ๊ฐค๋Ÿฌ๋ฆฌ์—์„œ ์ž์œ  ์ž์žฌ๋กœ ๊ณจ๋ผ์„œ ํ•˜๋‚˜ ๋˜๋Š” ์—ฌ๋Ÿฌ๊ฐœ๋ฅผ ์—…๋กœ๋“œ ํ•˜๊ธฐ๊ฐ€

 

๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์œ„ ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๊ฒ ๋„ค์š” !! ๊ทธ๋ ‡์ฅฌ?

 

 

1์— ๋„์ „ํ•ด ๋ด…์‹œ๋‹ค ๊ทธ๋Ÿฌ๋ฉด. ์ด๊ฑฐ ํ•˜๋ฉด ๋ฐ˜์€ ์ •๋ณตํ•˜๋Š” ๊ฑฐ์—์š”. ๋งค์šฐ ๊ฐ„๋‹จํ•˜๋‹ˆ ๋ ˆ์ธ ๊ณ ~

 

 

ํ•ญ์ƒ ์ฒœ๋ฆฌ๊ธธ๋„ ๊ณต์‹ ๋ฌธ์„œ๋ถ€ํ„ฐ์ž…๋‹ˆ๋‹ค. ๊ทผ๋ฐ ๋ฐ‘์— ์„ค๋ช…์ด ์žˆ์œผ๋‹ˆ ์•ˆ ์ฝ์–ด๋„ ๋ผ์š” !!

UI Image Picker Controller ์— ๋Œ€ํ•œ ๊ณต์‹ ๋ฌธ์„œ, ์ฝ์ง€ ๋งˆ์‹œ์˜ค !!

 

 ์ฒซ ๋ฒˆ์งธ๋กœ ๋ˆˆ ์—ฌ๊ฒจ ๋ณผ ์ ์€, ์–˜๊ฐ€ 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๋ฒˆ์„ ์ •๋ณตํ•  ๊ฑฐ์—์š”. ๊ฐค๋Ÿฌ๋ฆฌ์—์„œ ์˜์ƒ๊ณผ ์‚ฌ์ง„์„ ์›ํ•˜๋Š” ๊ฐฏ์ˆ˜๋งŒํผ ๊ฐ€์ ธ์˜ค๊ธฐ. 

 

( ๋งค์šฐ ... ์ง€์น˜๋„ค์š” .. ํ›„ ..

์žฌ๋ฐŒ๋‹ค ์žฌ๋ฐŒ๋‹ค ์žฌ๋ฐŒ๋‹ค ์žฌ๋ฐŒ๋‹ค ... ์ผ๋‹จ ์Šค์Šค๋กœ๋ฅผ ์†์—ฌ๋ณด๊ณ  ๊ณ„์†ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ํ–‰๋ณตํ•ด์„œ ์›ƒ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ์›ƒ์–ด์„œ ํ–‰๋ณตํ•œ ๊ฑฐ ์ž๋‚˜์š” ๊ทธ์ตธ? )

 

  ๊ทธ๋Ÿฐ๋ฐ ... ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค.  2๋ฒˆ ๋ฏธ์…˜์€ UIImagePickerController๋ฅผ ์ด์šฉํ•ด์„œ, ๊ตฌํ˜„ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. 

 

  UIImagePickerController๋Š” ํ•œ ๋ฒˆ์— ํ•œ ์˜์ƒ ๋˜๋Š” ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ๊ตฌํ˜„๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์š”. ๋ฌผ๋ก  ์žฅ์ ์€ ์žˆ๋Š”๋ฐ, ๋ฐ”๋กœ ํ•˜๋‚˜์”ฉ ๊ฐ€์ ธ์˜ค๋ฉด์„œ, ํŽธ์ง‘์„ ํ•˜๊ณ  ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ƒํ™ฉ์— ๋”ฐ๋ผ์„œ๋Š” ์ด ํด๋ž˜์Šค๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•ด๋„ ๋˜๊ฒ ์ง€๋งŒ, ๋งŒ์•ฝ, ์•ฑ ํŠน์„ฑ์ƒ, ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ด๋ฏธ์ง€๋ฅผ ํ•œ ๋ฒˆ์— ๊ฐ€์ ธ์˜ค๋Š” ๊ฒŒ ๋‹น์—ฐํ•˜๋ฉด, ์ด๊ฑธ ์“ฐ๋ฉด ์•ˆ ๋œ๋‹ค๋Š” ,,, ๊ทธ๋Ÿฐ ์œ„๊ธฐ ์ƒํ™ฉ์ž…๋‹ˆ๋‹ค. 

 

 

  ์• ํ”Œ์—์„œ ์™œ ์ด๋ ‡๊ฒŒ ํ–ˆ์ง€ ์˜๋ฌธ์ด ๋“ญ๋‹ˆ๋‹ค๋งŒ, ๋ณ„์ˆ˜ ์—†์ด third party ์ œ 3์ž API ์ฆ‰, ๋‹ค๋ฅธ ๋˜‘๋˜‘ํ•˜์‹  ๋ถ„๋“ค์ด ์—ฌ๋Ÿฌ๊ฐœ ์ด๋ฏธ์ง€, ์˜์ƒ์„ ํ”ฝํ•ด์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์„œ ์ธํ„ฐ๋„ท์— ์นœํžˆ ๊ณต๊ฐœํ•œ API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ˆ˜ ๋ฐ–์— ์—†์Šต๋‹ˆ๋‹ค. ์•„๋‹ˆ๋ฉด ๋ญ ์ง์ ‘ ๊ฐœ๋ฐœํ•˜์…”๋„ ๋˜๊ตฌ์š”.

 

  ๊ทธ๋Ÿฐ๋ฐ, ์ €๋Š” ์•„์ง ๊ทธ์ •๋„ ๋ ˆ๋ฒ ๋ฃจ๊ฐ€ ์•„๋‹Œ์ง€๋ผ, ์šฐ์„  ์จ๋“œ ํŒŒํ‹ฐ API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์„ ํƒํ•  ๊ฑฐ์—์š” !! ์ด API์— ๋Œ€ํ•ด์„œ๋Š”, ๋‹ค์Œ ๊ฒŒ์‹œ๋ฌผ์—์„œ ๋‹ค๋ฃจ๋„๋ก ํ• ๊ฒŒ์š” !! 

badassdev.tistory.com/18

 

YPImagePicker : ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์˜์ƒ๊ณผ ์‚ฌ์ง„์„ ์ž์œ  ์ž์žฌ๋กœ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

์จ๋“œ ํŒŒํ‹ฐ - ์˜คํ”ˆ ์†Œ์Šค github.com/Yummypets/YPImagePicker Yummypets/YPImagePicker ๐Ÿ“ธ Instagram-like image picker & filters for iOS. Contribute to Yummypets/YPImagePicker development by creating an ac..

badassdev.tistory.com

์ด ๊ฒŒ์‹œ๋ฌผ์„ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”.