Skip to content

Instantly share code, notes, and snippets.

@runys
Created January 9, 2017 18:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save runys/2ff00df14392e418f6df4d14f0202b07 to your computer and use it in GitHub Desktop.
Save runys/2ff00df14392e418f6df4d14f0202b07 to your computer and use it in GitHub Desktop.
Simple Camera and Picture Library Tutorial using iOS 10 and Swift 3.
/*:
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