Stack Overflow em Português Asked by Junior Sanches on February 11, 2021
Bom dia pessoal, estou desenvolvendo uma aplicação em Swift, porém sou novo na linguagem e não sei algumas coisas, gostaria de saber como eu Anexo as imagens da minha galeria ou abro a camera do celular para tirar um foto.
Obrigado desde já.
Opa, blza!? segue o código para fazer essa ação, nativo do ios, nao gasta adicionar lib nenhuma.
import UIKit
import Firebase
import APESuperHUD
class CadastroEleitorViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
@IBOutlet weak var txtNome: UITextField!
var nome: String!
@IBOutlet weak var txtSobrenome: UITextField!
var sobrenome: String!
@IBOutlet weak var txtEmail: UITextField!
var email: String!
@IBOutlet weak var txtSenha: UITextField!
var senha: String!
@IBOutlet weak var imagemPerfil: UIImageView!
var imagem : UIImage!
var mEleitorModel = EleitorModel()
var ref: DatabaseReference!
var userID : String!
override func viewDidLoad() {
super.viewDidLoad()
if FirebaseApp.app() == nil {
FirebaseApp.configure()
}
ref = Database.database().reference()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
dismiss(animated: true, completion: nil)
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
imagem = info[UIImagePickerControllerOriginalImage] as! UIImage
imagemPerfil.image = imagem
imagemPerfil.layer.borderWidth = 1.0
imagemPerfil.layer.masksToBounds = false
imagemPerfil.layer.borderColor = UIColor.white.cgColor
imagemPerfil.layer.cornerRadius = imagemPerfil.frame.size.width / 2
imagemPerfil.clipsToBounds = true
dismiss(animated: true, completion: nil)
}
@IBAction func botaoTirarFoto(_ sender: Any) {
capturaFoto()
}
override var preferredStatusBarStyle: UIStatusBarStyle{
return.lightContent // barra de status tema claro
}
@IBAction func iconeVoltar(_ sender: Any) {
navigationController?.popViewController(animated: true)
dismiss(animated: true, completion: nil)
}
@IBAction func botaoCadastrar(_ sender: Any) {
if validaCampos() {
FunctionDefault.exibeProgress(mensagem: "Carregando...")
criaUsuario()
}
}
@IBAction func botaoCadastrarFacebook(_ sender: Any) {
let storyboard = UIStoryboard(name: "Usuario", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "PagamentoViewController") as UIViewController
present(vc, animated: true, completion: nil)
}
@IBAction func botaoLogin(_ sender: Any) {
telaLogin()
}
func validaCampos() -> Bool {
nome = txtNome.text?.trimmingCharacters(in: .whitespacesAndNewlines)
sobrenome = txtSobrenome.text?.trimmingCharacters(in: .whitespacesAndNewlines)
email = txtEmail.text?.trimmingCharacters(in: .whitespacesAndNewlines)
senha = txtSenha.text?.trimmingCharacters(in: .whitespacesAndNewlines)
if nome.isEmpty {
FunctionDefault.AlertMessage(title: "Alerta", message: "Por favor informe seu nome!", targetVC: self)
return false
}
if sobrenome.isEmpty {
FunctionDefault.AlertMessage(title: "Alerta", message: "Por favor informe seu sobrenome!", targetVC: self)
return false
}
if email.isEmpty {
FunctionDefault.AlertMessage(title: "Alerta", message: "Por favor informe seu e-mail!", targetVC: self)
return false
}
if senha.isEmpty {
FunctionDefault.AlertMessage(title: "Alerta", message: "Por favor informe uma senha!", targetVC: self)
return false
}
if senha.count < 6 {
FunctionDefault.AlertMessage(title: "Alerta", message: "Senha muito curta, digite no mínimo 6 caracteres!", targetVC: self)
return false
}
if imagem == nil {
let alert = UIAlertController(title: "Foto do perfil", message: "Vamos adicionar uma foto ao seu perfil para que todos possam te identificar.", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "Selecionar foto", style: UIAlertActionStyle.default, handler: { (action) in
self.capturaFoto()
}))
self.present(alert, animated: true, completion: nil)
return false
}
return true
}
func uploadImage() -> Void {
let storage = Storage.storage()
let nomeImagem = self.nome + ".jpg"
let storageRef = storage.reference().child("App/Eleitores").child(userID).child("ImagemPerfil").child(nomeImagem)
let metadata = StorageMetadata()
metadata.contentType = "image/jpeg"
if let uploadData = UIImageJPEGRepresentation(self.imagemPerfil.image!, 0.2){
storageRef.putData(uploadData, metadata: metadata, completion: { (metadata, error) in
if error == nil{
storageRef.downloadURL { url, error in
if error != nil {
// Handle any errors
} else {
self.mEleitorModel.urlFotoPerfil = url?.absoluteString
self.gravaUsuario()
}
}
}
})
}
}
func criaUsuario() -> Void {
Auth.auth().createUser(withEmail: email, password: senha) { (user, error) in
if error == nil {
self.userID = Auth.auth().currentUser!.uid
let date = Date()
let formatter = DateFormatter()
formatter.dateFormat = "dd/MM/yyyy"
let dataAtual = formatter.string(from: date)
self.mEleitorModel.id = self.userID
self.mEleitorModel.nome = self.nome + " " + self.sobrenome
self.mEleitorModel.email = self.email
self.mEleitorModel.dataCadastro = dataAtual
self.uploadImage()
}
else{
if error.debugDescription.contains("The email address is already in use by another account."){
let alert = UIAlertController(title: "Atenção", message: "Este email já consta em nosso cadastro, efetue o login ou relembre sua senha.", preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "Relembrar Senha", style: UIAlertActionStyle.default, handler: { (action) in
self.telaAlterarSenha()
}))
alert.addAction(UIAlertAction(title: "Login", style: UIAlertActionStyle.default, handler: { (action) in
self.telaLogin()
}))
self.present(alert, animated: true, completion: nil)
}
FunctionDefault.dismissProgrees()
FunctionDefault.AlertMessage(title: "Erro", message: "Ocorreu uma falha ao processar seu pedido, revise seus dados e tente novamente!", targetVC: self)
}
}
}
func gravaUsuario() -> Void {
let encodedObject = try? JSONEncoder().encode(self.mEleitorModel)
let jsonObject = String(data: encodedObject!, encoding: .utf8)
let dict = FunctionDefault.convertToDictionary(text: jsonObject!)
self.ref.child("eleitores").child(userID).setValue(dict)
FunctionDefault.dismissProgrees()
//TODO: tratar proxima tela
}
func capturaFoto() -> Void {
let controller = UIImagePickerController()
controller.delegate = self
controller.sourceType = .photoLibrary
present(controller, animated: true, completion: nil)
}
func telaLogin() -> Void {
let storyboard = UIStoryboard(name: "Usuario", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "LoginViewController") as UIViewController
present(vc, animated: true, completion: nil)
}
func telaAlterarSenha() -> Void {
let storyboard = UIStoryboard(name: "Usuario", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "AlterarSenhaViewController") as UIViewController
present(vc, animated: true, completion: nil)
}
}
Answered by Leonardo Figueiredo on February 11, 2021
Você pode fazer um código gigante na mão ou usar um pod, que é o que eu recomendo. Já usei o pod ALCameraViewController, que possibilita tanto tirar fotos quanto escolher da galeria. Você pode encontrar o github dele aqui:
https://github.com/AlexLittlejohn/ALCameraViewController
Passos para utilização:
1) Adicione no seu podfile:
pod 'ALCameraViewController'
2) Importe no seu arquivo que vai chamar a view controller da camerâ o pod, com a seguinte linha:
import ALCameraViewController
3) Na hora de chamar a view controller da câmera use o seguinte código:
let cameraViewController = CameraViewController { [weak self] image, asset in
// A variável image que você recebe aqui vai ter a imagem que o usuário escolheu. Fique atento para o caso que ele cancela a escolha da imagem.
self?.dismiss(animated: true, completion: nil)
}
present(cameraViewController, animated: true, completion: nil)
Para mais dicas de swif, desenvolvimento iOS e empreendedorismo se inscreva no meu canal do youtube: https://www.youtube.com/channel/UCNghEgS-PkKMDbZfiwhvYpA
Answered by Rodrigo Guimarães on February 11, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP