2021. 8. 15. 18:03ใiOS
์ ํ ๊ธฐ๋ณธ ๋ฉ๋ชจ์ฅ ์ดํ๋ฆฌ์ผ์ด์ ์๋ ๋ฌธ์ ์ค์บ ๊ธฐ๋ฅ์ด ์์ต๋๋ค.
์๋์ผ๋ก ๋ฌธ์๋ฅผ ์ธ์ํด์ ์ดฌ์ํด์ฃผ๋ ๊ธฐ๋ฅ๋ ์์ต๋๋ค.
์ด๋ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๊ฒ์ด ๋ฐ๋ก ์ ํ์ VisionKit์ ๋๋ค.
Xcode ์๋ฎฌ๋ ์ดํฐ๋ ์นด๋ฉ๋ผ๋ฅผ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์,
์นด๋ฉ๋ผ๋ฅผ ์ผ์ ์ฌ์ง์ ์ฐ๋ ๊ณผ์ ์ด ํ์ํ VisionKit ๊ฐ๋ฐ ํ ์คํธ์๋
ํด๋ํฐ์ ์ฐ๊ฒฐํ๊ณ ์งํ์ ํด์ผ ํฉ๋๋ค.
์ ํฌ๋ ๊ฐ๋จํ๊ฒ ๋ฒํผ์ ๋๋ฌ์ ๋ฌธ์ ์ค์บ์ ์งํํ๊ณ ,
๊ทธ ์งํํ ๊ฒฐ๊ณผ๋ฅผ image View์ ๋ํ๋ด๋ณด๊ฒ ์ต๋๋ค.(์ ์ฒด ์ฝ๋๋ ๊ฐ์ฅ ํ๋จ์ ์์ต๋๋ค)
์ด๋ ์ค์บ์ ํด๋ณด๋ฉด ์์๊ฒ ์ง๋ง, ์ฌ๋ฌ์ฅ(์๋ง ์ต๋ 20์ฅ..?)๊น์ง ๋๊ธฐ ๋๋ฌธ์
page Control๋ฅผ(https://moonibot.tistory.com/29)์ฌ๊ธฐ์ ์ฐธ๊ณ ํ์ต๋๋ค.
page control์ ๋ถ๊ฐ์ ์ธ ์์์ด๊ธฐ ๋๋ฌธ์, ๋ฐ๋ก ์ฝ๋ ์ค๋ช ์ ํ์ง ์๊ณ ๋์ด๊ฐ๊ฒ ์ต๋๋ค.
๊ฐ๋จํ๊ฒ ๋ฌธ์ ์ค์บํ๊ธฐ ๋ฒํผ, Image View, ๊ทธ๋ฆฌ๊ณ Page Control์ ๋ฃ์ด์ฃผ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ณธ๊ฒฉ์ ์ผ๋ก Vision kit์ ์ฌ์ฉํด๋ด ์๋ค.
๊ฐ์ฅ ์ค์ํ ๊ฑด import VisionKit ๊ณผ VNDocumentCameraViewControllerDelegate ์ ๋๋ค.
quick help์ด๋ developer document๋ก ํ์ธํด๋ณด๋ฉด ์ด๊ฑด ํ๋กํ ์ฝ์ด๋ผ๋ ๊ฑธ ํ์ธํ ์ ์์ต๋๋ค.
๊ทธ๋ผ ์ด์ ๋ฒํผ์ ๋๋ ์๋ ์นด๋ฉ๋ผ ํ๋ฉด์ ๋์ฐ๊ณ ์ค์บ์ ํด๋ณด๊ฒ ์ต๋๋ค.
๊ทธ ์ ์!! ์นด๋ฉ๋ผ๋ฅผ ์ฌ์ฉํ๋ค๋ ๊ฑด ์ฌ์ฉ์์ ํ๋ฝ์ด ์์ด์ผ ํ๊ธฐ ๋๋ฌธ์
Info.plist์์ ์นด๋ฉ๋ผ ์ฌ์ฉ ํ๊ฐ๋ฅผ ํด์ผํฉ๋๋ค.
'Privacy - Camera Usage~'๋ฅผ ํด๋ฆญํด์ฃผ์๊ณ Value์ ์๋ด์ฐฝ์ ๋์ธ ๋ด์ฉ์ ์ ๋ ฅํฉ๋๋ค.
๊ทธ๋ผ ์ด์ ๋ฒํผ์ ๋๋ฅด๊ฒ ๋๋ Action ํจ์์์ ์ค์บ ๊ธฐ๋ฅ + ์นด๋ฉ๋ผ๋ฅผ ํ์ฑํ ํด ๋ด ์๋ค.
๋ณด๊ธฐ ๊น๋ํ๊ธฐ ์ํด์ visionKit์ด๋ผ๋ ํจ์๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด์ ํธ์ถํด์ฃผ์๋๋ฐ์,
scan.delegate๋ present๋ ๊ณต์ ๋ฌธ์์์ ์ํค๋๋๋ก ํด์ฃผ์์ต๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด ํจ์ ์ด๋ฆ์์๋ ์ ์ ์๋ฏ present๋ง ํด์ค๊ฒ๋๋ค.
๊ทธ๋ผ ๋ชจ๋ ๋ฌธ์๋ฅผ ์ค์บํ๊ณ ์๋ฃํ์๋ ํธ์ถํ ํจ์๊ฐ ๋ ํ์ํ๊ฒ ์ฃ .
๊ทธ๊ฒ ๋ฐ๋ก
์ด ํจ์์ ๋๋ค.
์๋์ ๋ณด์๋ฉด dismiss๊ฐ ์๋ค๋ ๊ฒ๋ ํ์ธํ ์ ์์ต๋๋ค.
์ด ํจ์๋ ์ฐ๋ฆฌ๊ฐ ์ง์ ํธ์ถํ๋ ๊ฒ ์๋๋ผ ์ค์บ์ด ๋๋๊ณ 'Save'๋ฒํผ์ ํด๋ํฐ์์ ๋๋ฅด๋ฉด
์๋์ผ๋ก ํธ์ถ๋๋ ํจ์์ ๋๋ค.
๊ทธ๋ผ ๋ชจ๋ ๊ฒ ๋๋ฌ์ต๋๋ค! ์ ์ฒด ์ฝ๋๋ ์ ์ด๋ํ ๋ ํ์ํ์ ๋ถ๋ค์ ํ์ธํด๋ณด์ธ์.
//
// ViewController.swift
// VisionKit_Test
//
// Created by Nayeon Kim on 2021/08/15.
//
import UIKit
import VisionKit
class ViewController: UIViewController, VNDocumentCameraViewControllerDelegate {
@IBOutlet weak var scanButton: UIButton!
@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var pageControl: UIPageControl!
var images:Array<Any> = []
//๋น์ด ์๋ Any ํ์
๋ฐฐ์ด. ์ฌ๊ธฐ์ ์ค์บํ ์ด๋ฏธ์ง๋ค์ ์ ์ฅํ ๊ฒ์.
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
@IBAction func buttonPressed(_ sender: Any) {
images = [] //์ฒ์์ '์ค์บํ๊ธฐ' ๋ฒํผ์ ๋๋ฅด๋ฉด ์ด๊ธฐํ ์์ผ ์๋ก์ด ๊ฐ์ ์ ์ฅ
visionKit()
}
@IBAction func pageChanged(_ sender: Any) {
//ํ์ด์ง ์ปจํธ๋กค์ ๋๋ฅด๊ฒ ๋์ด์ ํ์ด์ง๊ฐ ๋ฐ๋๊ฒ ๋๋ฉด ํธ์ถ๋๋ ํจ์
imageView.image = (images[pageControl.currentPage] as! UIImage) //ํด๋น ํ์ด์ง (ex.2)์ ๋ง๋ images[2] ์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฌ์ด
}
private func visionKit(){
let scan = VNDocumentCameraViewController() //์ปจํธ๋กค๋ฌ
scan.delegate = self
self.present(scan, animated: true, completion: nil)
}
func documentCameraViewController(_ controller: VNDocumentCameraViewController, didFinishWith scan: VNDocumentCameraScan) {
for pageNumber in 0..<scan.pageCount { //์ค์บํ ๋ฌธ์ ์๋ฅผ ์ธ์ ๊ทธ ๊ฐฏ์๋์ for๋ฌธ ๋๊ธฐ
let image = scan.imageOfPage(at: pageNumber)
images.append(image) //images ๋ฐฐ์ด์ ์ค์บํ ์ด๋ฏธ์ง๋ค ํ๋์ฉ ์ ์ฅ
}
pageControl.numberOfPages = images.count
pageControl.currentPage = 0
imageView.image = (images[0] as! UIImage) //์ฒซ ์ด๋ฏธ์ง ๋๊ฒจ์ฃผ๊ธฐ
controller.dismiss(animated: true, completion: nil)
}
}
<๊ฒฐ๊ณผ๋ฌผ>
์ง๋ฌธ์ฌํญ์ด๋ ์๋ชป๋ ๋ถ๋ถ์ด ์์ผ๋ฉด ๋๊ธ ๋จ๊ฒจ์ฃผ์ธ์!
๊ฐ์ฌํฉ๋๋ค :)