Created
January 9, 2017 18:57
-
-
Save runys/2ff00df14392e418f6df4d14f0202b07 to your computer and use it in GitHub Desktop.
Simple Camera and Picture Library Tutorial using iOS 10 and Swift 3.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*: | |
Simples tutorial sobre como utilizar a Camera e a Biblioteca de fotos para capturar imagens e utilizá-las em seu aplicativo | |
Referências: | |
- https://makeapppie.com/2016/06/28/how-to-use-uiimagepickercontroller-for-a-camera-and-photo-library-in-swift-3-0/ | |
- https://turbofuture.com/cell-phones/Access-Photo-Camera-and-Library-in-Swift | |
Antes de qualquer coisa, precisamos pedir autorização do usuário para acessarmos a camera e a biblioteca de fotos. | |
Para isso vá no info.plist e adicione as seguintes chaves: | |
* Privacy - Photo Library Usage Description | |
* Privacy - Camera Usage Description | |
No valor das chaves coloque o motivo de acessar esses recursos | |
* Selecionar foto para exibir no app | |
* Tirar foto para exibir no app | |
*/ | |
class TutorialCameraEBibliotecaDeImagens: UIViewController { | |
// 1. Primeiramente precisamos de um UIImagePickerController | |
// É ele que vamos utilizar para acessar os recursos do telefone | |
let imagePicker = UIImagePickerController() | |
// Aqui é onde iremos armazenar a imagem que pegarmos com o imagePicker | |
// No seu projeto será um @IBOutlet | |
var myImageView: UIImageView! | |
// Definimos uma váriavel computada para servir de interface a propriedade 'image' da imageView | |
var imagePickedByUser: UIImage? { | |
get { | |
return myImageView.image | |
} | |
set { | |
myImageView.image = newValue | |
} | |
} | |
} | |
// 2. Precisamos que nossa classe implemente os protocolos | |
// - UIImagePickerControllerDelegate | |
// - UINavigationControllerDelegate | |
// Para que ela possa ser 'delegate' de um UIImagePickerController | |
extension TutorialCameraEBibliotecaDeImagens: UIImagePickerControllerDelegate, UINavigationControllerDelegate { | |
// Agora podemos implementar os métodos para usar os recursos | |
// 3. Pegando imagem da Biblioteca de Imagens | |
func getImageFromPictureLibrary() { | |
// 3.1 Configuramos o imagePicker | |
imagePicker.delegate = self // Definimos onde estão os métodos delegados | |
imagePicker.sourceType = .photoLibrary // Definimos a origem das imagens | |
// Definimos os tipos de media a serem utilizados | |
imagePicker.mediaTypes = UIImagePickerController.availableMediaTypes(for: .photoLibrary)! | |
// 3.2 Definimos se o usuário poderá editar a foto após escolhe-lá | |
imagePicker.allowsEditing = true | |
// 3.3 Apresentamos o ImagePicker para o usuário escolher a imagem | |
present(imagePicker, animated: true, completion: nil) | |
} | |
// 4. Devemos implementar o método a seguir para definir o que fazer quando o usuário terminar de escolher a imagem | |
// Esse método é chamado após o usuário confirmar a imagem escolhida | |
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { | |
// 4.1 Definimos a forma como a imagem vai renderizar dentro da ImageView | |
myImageView.contentMode = .scaleAspectFit | |
// 4.2 Pegamos a imagem da camera e aplicamos na ImageView | |
imagePickedByUser = info[UIImagePickerControllerOriginalImage] as! UIImage? | |
// 4,3 Saimos do modo camera | |
dismiss(animated: true, completion: nil) | |
} | |
// 5. Este método implementa o que acontece quando o usuário aperta o botão de Cancelar | |
// Ele serve tanto para pegar imagem da biblioteca quanto para tirar foto com a camera | |
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { | |
// Vamos apenas dispensar a tela de seleção de imagem ou de tirar foto | |
dismiss(animated: true, completion: nil) | |
} | |
// 6. Pegando imagens utilizando a Camera | |
func getImageFromCamera() { | |
// 6.1 Conferimos se a camera está disponivel no device | |
if UIImagePickerController.isSourceTypeAvailable(.camera) { | |
// 6.2 Configuramos o imagePicker | |
imagePicker.delegate = self // Definimos onde estão os métodos delegados | |
imagePicker.sourceType = .camera // Definimos a origem das imagens | |
// Definimos os tipos de media a serem utilizados | |
imagePicker.mediaTypes = UIImagePickerController.availableMediaTypes(for: .camera)! | |
// 6.3 Definimos que não queremos editar a foto após tira-la | |
imagePicker.allowsEditing = false | |
// 6.4 Apresentamos o Image Picker para o usuário, vindo de baixo pra cima | |
present(imagePicker, animated: true, completion: nil) | |
} else { | |
showNoCameraMessage() | |
} | |
} | |
// EXTRA: Exibindo um alerta (pop-up) | |
func showNoCameraMessage() { | |
// Definimos o conteudo do alerta | |
let title = "No Camera" | |
let message = "Você não possui acesso a camera" | |
// Criamos uma nova Alert Controller | |
let alertVC = UIAlertController(title: title, message: message, preferredStyle: .alert) | |
// Criamos uma ação para nossa Alert Controller | |
let okAction = UIAlertAction(title: "OK", style: .default, handler: nil) | |
// Adicionamos a ação na nossa Alert Controller | |
alertVC.addAction(okAction) | |
// Exibimos a Alert Controller | |
present(alertVC, animated: true, completion: nil) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment