사진 가져오기 (UIImagePickerController)
이번에는 사진을 카메라로 찍거나 앨범에서 가져와서 image를 표현하는걸 해보자.
아래와 같이 실행된다.
======================================================================
1. ImageView 생성
1. ImageView 생성
사진을 표현하기 위한 UIImageView를 생성하고 이 ImageView를 tap 하였을 때 특정 event가 실행되게 한다.
(1) UIImageView생성
- View size에 비례하게 ImageView size를 설정하고 위치는 View의 정중앙으로 한다.
- Image 가져올 때 비율 설정을 하기 위해 contentMode 설정을 한다.
(2) UIImageView를 tap 할경우 특정 Event가 실행되도록 UITapGestureRecognizer를 추가한다.
(3) UIImageView를 tap 할 경우 반응을 할 수 있도록 isUserInteractionEnabled를 true로 설정한다.
2. UIImagePickerController 생성
(1) UIImagePickerController를 생성하기 위한 보조 함수이다.
- (2)에서 중복으로 사용되는 부분이라 이렇게 함수로 따로 빼놓았다.
- sourceType을 매개변수로 입력받아서 sourceType에 맞는 PickerController를 나타내 준다.
- PickerController를 사용하기 위해선 두가지 프로토콜(UIImagePickerControllerDelegate, UINavigationControllerDelegate)을 추가해야 한다.
(2) Image를 tap 하였을 때 UIAlertController가 나오게 하였다.
- UIImagePickerControllerSourceType의 경우 세가지로 되어 있다. 각 type이 적용 가능한지 check한 후 거기에 맞는 pickerController를 나타내게 하였다.
3. ImageView에 선택된 Image 표시하기
(1) Image가 선택되면 자동으로 실행되는 delegate 함수이다.
- info에 UIImagePickerControllerEditedImage 를 선택하여 수정된 image를 가져오게 한다.
- 화면에 표시될 image를 이렇게 가져온 image로 표시한다.
아래와 같이 실행된다.
======================================================================
1. ImageView 생성
2. UIImagePickerController 생성
3. ImageView에 선택된 Image 표시하기
======================================================================3. ImageView에 선택된 Image 표시하기
사진을 표현하기 위한 UIImageView를 생성하고 이 ImageView를 tap 하였을 때 특정 event가 실행되게 한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
class ViewController: UIViewController {
var sampImage: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
// (1) UIImageView 생성
sampImage = UIImageView()
sampImage.frame.size = CGSize(width: self.view.frame.width/3 * 2, height: self.view.frame.height / 3 * 2)
sampImage.center = CGPoint(x: self.view.frame.width / 2, y: self.view.frame.height / 2)
sampImage.contentMode = .scaleAspectFit
sampImage.backgroundColor = UIColor.blue
// (2) UIImageView에 tapGesture 추가
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(imageTapped))
self.sampImage.addGestureRecognizer(tapGesture)
// (3)
self.sampImage.isUserInteractionEnabled = true
self.view.addSubview(sampImage)
}
}
| cs |
(1) UIImageView생성
- View size에 비례하게 ImageView size를 설정하고 위치는 View의 정중앙으로 한다.
- Image 가져올 때 비율 설정을 하기 위해 contentMode 설정을 한다.
(2) UIImageView를 tap 할경우 특정 Event가 실행되도록 UITapGestureRecognizer를 추가한다.
(3) UIImageView를 tap 할 경우 반응을 할 수 있도록 isUserInteractionEnabled를 true로 설정한다.
2. UIImagePickerController 생성
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
32
33
34
35
36
37
38
39
|
class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
var sampImage: UIImageView!
override func viewDidLoad() {
....
}
// (1)UIImagePickerController 생성하는 보조 함수
func imgPicker(_ source: UIImagePickerControllerSourceType) {
let picker = UIImagePickerController()
picker.sourceType = source
picker.delegate = self
picker.allowsEditing = true
self.present(picker, animated: true, completion: nil)
}
// (2)Imgage Tap하였을 때 실행
@objc func imageTapped() {
let alert = UIAlertController(title: "선택하시오", message: nil, preferredStyle: .alert)
if UIImagePickerController.isSourceTypeAvailable(.camera) {
alert.addAction(UIAlertAction(title: "camera", style: .default, handler: { (_) in
self.imgPicker(.camera)
}))
}
if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) {
alert.addAction(UIAlertAction(title: "photoLibrary", style: .default, handler: { (_) in
self.imgPicker(.photoLibrary)
}))
}
if UIImagePickerController.isSourceTypeAvailable(.savedPhotosAlbum) {
alert.addAction(UIAlertAction(title: "savedPhotosAlbum", style: .default, handler: { (_) in
self.imgPicker(.savedPhotosAlbum)
}))
}
alert.addAction(UIAlertAction(title: "cancel", style: .cancel, handler: nil))
self.present(alert, animated: true, completion: nil)
}
}
| cs |
(1) UIImagePickerController를 생성하기 위한 보조 함수이다.
- (2)에서 중복으로 사용되는 부분이라 이렇게 함수로 따로 빼놓았다.
- sourceType을 매개변수로 입력받아서 sourceType에 맞는 PickerController를 나타내 준다.
- PickerController를 사용하기 위해선 두가지 프로토콜(UIImagePickerControllerDelegate, UINavigationControllerDelegate)을 추가해야 한다.
(2) Image를 tap 하였을 때 UIAlertController가 나오게 하였다.
- UIImagePickerControllerSourceType의 경우 세가지로 되어 있다. 각 type이 적용 가능한지 check한 후 거기에 맞는 pickerController를 나타내게 하였다.
3. ImageView에 선택된 Image 표시하기
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
|
class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
var sampImage: UIImageView!
override func viewDidLoad() {
....
}
// UIImagePickerContrtoller 생성하는 보조 함수
func imgPicker(_ source: UIImagePickerControllerSourceType) {
....
}
// Imgage Tap하였을 때 실행
@objc func imageTapped() {
....
}
// (1)Image 선택이 완료되었을 때 실행되는 Delegate 함수
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
if let image = info[UIImagePickerControllerEditedImage] as? UIImage {
self.sampImage.image = image
}
picker.dismiss(animated: true, completion: nil)
}
}
| cs |
(1) Image가 선택되면 자동으로 실행되는 delegate 함수이다.
- info에 UIImagePickerControllerEditedImage 를 선택하여 수정된 image를 가져오게 한다.
- 화면에 표시될 image를 이렇게 가져온 image로 표시한다.
댓글
댓글 쓰기