Primeiras aulas do curso iOS parte 1: Usando recursos nativos

iOS parte 1: Usando recursos nativos

Acessando a câmera do iPhone/iPad - Introdução

Olá, pessoal. Meu nome é Ândriu, eu sou desenvolvedor iOS e instrutor aqui na Alura. Bem-vindos ao curso de Recursos Nativos pra iOS.

Vamos iniciar esse curso entendendo como que utiliza o core data pra fazer a persistência de dados locais no nosso device. Nós temos como exemplo esse projeto da agenda, em que nós temos um formulário com várias opções e nós aprendemos como persistimos esses objetos, que são os alunos, no nosso device. Assim, se precisarmos fechar o app e abri-lo de novo, nós não perdemos os dados cadastrados.

Depois nós vamos seguir entendendo como que utilizamos a câmera no nosso app. Então eu tenho aqui o meu iPhone mesmo rodando e nós vamos aprender a utilizar a câmera para tirar fotos, tanto foto quanto também vamos aprender a utilizar a biblioteca de fotos do iOS. Eu posso utilizar a foto que eu tirei, eu posso acessar a biblioteca. Esse é o primeiro recurso que nós vamos aprender.

Nós vamos seguir implementando outros recursos como, por exemplo, o envio de SMS. Eu tenho aqui um action sheet com várias opções, nós vamos aprender a integrar o app de SMS do iOS com o nosso aplicativo da agenda.

Também vamos ver como fazemos ligações telefônicas a partir de nosso app. Se eu clicar aqui em “Ligar” eu tenho acesso à função de chamada telefônica a partir do meu app. Assim nós evitamos ter que ficar trocando de app, digitando o número do aluno, até nós conseguirmos fazer a chamada telefônica.

Depois nós vamos continuar implementando a integração com outros aplicativos, um bom exemplo seria utilizarmos o Waze. Então eu tenho aqui, no caso do João, a localização dele, que é o Masp, em São Paulo. E se eu quiser traçar uma rota até onde o João está, eu posso utilizar o Waze.

Eu venho aqui e clico em “localizar no waze”, aí eu abro o aplicativo do Waze no meu iPhone, onde nós conseguimos traçar exatamente a rota de onde nós estamos até o endereço do João. Olha só, ele mostra certinho o endereço até a Avenida Paulista, no Masp, que é onde eu cadastrei o João.

Depois disso vamos aprender a utilizar o mapa nativo mesmo do iOS, o MapKit. Se eu fizer um long press aqui e clicar em localizar no mapa, ele me mostra o ponto da Caelum, que é o ponto central que eu configurei e mostra também onde está o João, através do endereço dele. Nós vamos entender como que utiliza o mapa no nosso aplicativo.

E por último, vamos fazer chamadas para web services de forma nativa, então vamos aprender a calcular a média dos alunos. Eu tenho uma lista de alunos, eu mando essa lista para o servidor da Caelum e ele faz o cálculo e me devolve a média dos alunos, tudo isso de forma nativa. Eu espero que você goste do curso e até mais.

Acessando a câmera do iPhone/iPad - Utilizando a câmera

Tudo bem? Antes de iniciarmos o nosso projeto, eu vou deixar o link pra download, onde já vai ter a parte visual do projeto que nós vamos utilizar.

O objetivo desse curso é aprendermos como que nós usamos alguns recursos nativos do iOS, como, por exemplo, a câmera, o envio de SMS, ligação telefônica, o uso do mapa. Tem vários recursos nativos que nós vamos aprender.

Nós vamos trabalhar em um projeto da agenda. É muito trabalhoso para qualquer pessoa ficar anotando, por exemplo, endereço, informações em um papel. Então nós vamos fazer um app para automatizar essas coisas. No aplicativo que nós vamos fazer, vamos conseguir cadastrar alunos, vamos colocar a localização dele, vamos colocar o número de telefone e tudo isso nós vamos utilizar pra montar essas features.

A primeira delas que nós vamos ter que utilizar é nessa tela de cadastro. Nós temos aqui um formulário, onde temos uma foto, uma image view, tem aqui algumas labels, text fields, tem nome, endereço, telefone, site. Tem o stepper, onde nós conseguimos colocar a nota e o botão salvar.

Eu estou com o aplicativo rodando, só pra nós entendermos qual vai ser nossa primeira tarefa. Eu vou clicar no “+”, onde vai abrir o formulário e aqui tem vários campos, onde nós vamos preencher normalmente. Só que repare que aqui nós temos a foto, que é um botão. Eu clico aqui e não está acontecendo nada. Nós vamos iniciar o projeto a partir desse ponto.

Qual é o arquivo dele? Vamos entender. Aqui é o Aluno View Controller, eu estou com a pasta “Alunos” aberta e vou abrir esse view controller. Vamos descer até nós acharmos a action, que é o botão foto. Aqui nós vamos ter que implementar a utilização da câmera, então é isso que nós vamos ver agora.

Pra utilizar a câmera, nós vamos utilizar uma classe que se chama UIImage Picker Controller. Então vamos criar uma constante dessa classe. “let”, nós podemos colocar, por exemplo, “multimidia”, que ela serve tanto para acessar a câmera quanto para buscarmos fotos na biblioteca do iOS, que também nós vamos ver. E vou inicializá-la. “UIImagePickerController”, é esse cara que nós vamos utilizar. Vou instanciar.

Feito isso nós precisamos falar pro iOS qual é o tipo de source, qual é o tipo de dado que nós vamos querer. Você vai querer exibir a câmera ou você vai querer ver a biblioteca de fotos do usuário? Nós temos que configurar isso.

Vou colocar aqui “multimidia.sourceType” e aqui eu vou colocar um ponto e ele tem um menu de opções. Qual é a opção que nós vamos querer agora? A câmera. Então “.camera”. Nós já criamos então o controller, que vai servir pra exibir a tela de fotos no nosso app. Como que nós fazemos pra exibir?

Nós vamos aqui, “self.present” e ele espera um “UIViewController”. Como o UIImagePicker herda de UIViewController, nós podemos passá-lo aqui, então “multimidia”, animado eu vou pôr “true”, que eu vou querer que ele apareça animado, e unblocked completion aqui eu não vou querer fazer nada. Nós vamos testar isso agora. Vou rodar o app e nós vamos ver o que vai acontecer.

Vou clicar no “+”, vim pro formulário. Eu vou clicar aqui em “foto”, vamos ver o que vai acontecer. Cliquei aqui. No console já deu que ocorreu alguma exception. Vamos entender o que aconteceu?

Vou subir um pouco, deixa eu aumentar pra podermos visualizar. Ele fala que terminou o app porque o source, que é a câmera, não está disponível. Por que será que não está disponível?

É o seguinte, alguns recursos do iOS, como a câmera, o GPS, o envio de SMS, nós não conseguimos testar no simulador, então nós precisamos realmente de um iPhone ou um iPad de verdade pra testar esses recursos, por isso que ele deu esse exception pra nós.

Eu estou aqui com meu iPhone já plugado no Mac, então vamos testar nele. Mas o ideal é nós fazermos uma verificação, para saber se está disponível esse recurso no device que o Xcode que vai instalar o app ou não.

Como que nós fazemos isso? Através de um if. Vou colocar aqui um “if UIImagePickerController.isSourceType”, eu passo aqui a câmera, porque eu quero saber se é a câmera que está disponível ou não. Se ela entrar no if significa que a câmera está disponível pra uso, então eu vou passar todo esse código pra dentro do if. Agora sim eu posso testar em um device de verdade.

Será que nós precisamos fazer mais alguma implementação antes disso? Nós já vamos ver. Vou clicar aqui e nós vamos rodar em um iPhone agora. Vou vir aqui no “+” e agora nós vamos clicar no botão de foto. Cliquei em foto e olha só, ele deu outro exception.

O que acontece é o seguinte, quando nós acessamos algum recurso do usuário, como o GPS, a câmera e alguns outros, nós precisamos de permissão pra acessar esses recursos, eu não posso simplesmente usar o GPS no meu app e conseguir localizar onde o usuário está sem que ele saiba, com a câmera é a mesma coisa, eu não posso acessar a câmera sem que o usuário permita. Então nós precisamos colocar uma permissão, falar pro usuário: “eu preciso acessar a câmera pra utilizar, pra fazer tal coisa”, então é isso que nós vamos fazer agora.

Ele está falando que nós precisamos configurar esse arquivo “Info.plist”, está vendo que ele deu essa exception e falou qual arquivo que é? É isso que nós vamos fazer agora.

Vou vir aqui e esse arquivo está aqui, “Info.plist”, é ele que nós vamos utilizar. Esse arquivo guarda várias configurações gerais do nosso app, então nós precisamos colocar a nossa permissão aqui. Como nós fazemos?

Quando eu coloco o ponteiro do mouse em cima dessa primeira coluna, ele aparece um “+” aqui, está vendo? Então aqui nós conseguimos incluir uma nova permissão, é isso que eu vou fazer. Eu vou clicar aqui, beleza. Aí ele vai dar uma série de opções.

Pra nós acessarmos a câmera, eu vou digitar “Privacy” e aqui ele tem vários recursos que nós precisamos pedir permissão, Bluetooth, calendário, câmera, que é o que nós precisamos, contatos, face ID, o app de saúde. Então tem várias features que nós precisamos pedir permissão para o usuário, para que nós possamos acessar. O que eu vou escolher é o da câmera.

Fiz isso, agora eu vou dar um enter, só pra você ver como que fica. É essa permissão que eu preciso. Aqui tem uma coluna onde está escrito “Value”, o que nós colocamos aqui? Nós podemos colocar qualquer texto, na verdade nós precisamos explicar pro usuário por que precisamos utilizar esse recurso do device dele.

Eu posso colocar, por exemplo, “Este aplicativo precisa utilizar a câmera para preencher o formulário” e vou dar enter. Aqui pode ser qualquer texto, o que você quiser pôr pra explicar pro usuário por que você vai utilizar. Agora sim nós podemos testar a implementação da câmera. Eu vou rodar novamente no meu iPhone e nós vamos testar.

Então vamos clicar agora no “+” e em seguida em “foto”. Vou clicar em “foto” e antes de acessar a câmera olha o alerta que ele está mandando, ele fala “Agenda”, que é o nome do app, precisa acessar a câmera, “esse aplicativo precisa utilizar a câmera para preencher o formulário”. O usuário pode escolher em deixar ou não nós acessarmos esse recurso do dispositivo dele. Eu vou clicar em “Ok”.

Agora eu já estou conseguindo utilizar a câmera, olha só, a câmera já está funcionando. Eu vou tirar uma foto. Aqui nós temos a opção de usar foto, que é o que nós precisamos. Quando o usuário clicar em usar foto, tem que aparecer no formulário. Então vou clicar em usar e não aconteceu nada, porque nós ainda não implementamos nada nesse callback, ou seja, quando o usuário clicar em tirar a foto, nós temos que utilizar essa foto, então vamos fazer isso agora.

Primeiro passo, nós voltarmos nesse “AlunoViewController” e o que nós precisamos fazer? Implementar os métodos de delegate dessa classe aqui, “UIImagePickerController”, ela tem os métodos de delegate, inclusive que é esse quando o usuário seleciona a foto, que é o que nós vamos utilizar agora.

Pra não deixar tudo no ViewController, todas as responsabilidades acopladas no ViewController, eu vou criar uma nova classe pra implementar esses métodos, pra nós deixarmos isso isolado.

O que eu vou fazer agora? Eu vou criar um novo grupo, vou chamar de “Componentes”, que depois nós vamos pôr mais arquivos aqui dentro. O puxei pra baixo. Eu vou criar um arquivo que vai se chamar “ImagePicker”. Vou dar um next e vou dar um create.

Pra nós utilizarmos os métodos de delegate, qual o primeiro passo? Nós importarmos o protocolo desses métodos. Então eu vou pôr uma vírgula, “UIImagePickerControllerDelegate”. Selecionei esse cara. Quando eu faço isso eu já tenho acesso aos métodos. O método que nós precisamos é o seguinte, “didFinishPickingMediaWithInfo”, esse método grandão aqui.

Repare que na assinatura do método, ele tem um dictionary, um dicionário onde aqui é uma string e o valor é N, nós ainda não sabemos qual é. Nós precisamos extrair a foto desse dicionário. Então “let foto”. E eu vou pegar esse info, que é o dicionário, e eu vou pegar essa propriedade, “UIImagePickerControllerOriginalImage”, e vou convertê-la pra “UIImage”, que é o que nós precisamos pra setar no nosso outlet.

Depois que eu conseguir pegar a foto, eu vou fechar a tela de foto, porque o usuário já tirou a foto, já clicou em use, não tem porquê deixá-la. Eu vou pegar esse “picker”, que está na assinatura do método, “.dismiss” e vou deixá-lo animado. Então aqui vão ficar os nossos métodos, vou criar o marcador para deixar os métodos, e vou criar outro marcador pra nós deixarmos os atributos que nós formos criar. Então “Atributos”, só para deixar mais organizado.

Só que como nós fazemos para falar pro nosso image picker, que é essa constante que nós criamos, que quem vai implementar os métodos dessa classe vai ser esse arquivo que nós criamos, como é que nós fazemos isso? Nós precisamos criar uma constante desse arquivo.

Vou vir aqui em cima, vou criar um novo marcador também, “Atributos”, e vou criá-lo. Então “let imagePicker” é igual à classe que nós criamos, qual é a classe? “ImagePicker”. Instanciei-a.

O que nós precisamos fazer? Como nós temos acesso à constante que nós criamos, que é esse “multimidia”, nós podemos fazer o seguinte, “multimidia.delegate”, ou seja, quem vai implementar esses métodos não sou eu, vai ser essa constante que nós criamos. Qual é a constante? Esse image picker, então eu vou copiá-lo e vou colar aqui.

Ele vai pedir para nós implementarmos outro protocolo, que é esse “UINavigationControllerDelegate”, então pra ele fazer isso eu preciso utilizar esse protocolo aqui. Esse nós já implementamos, “ImagePickerControllerDelegate”, falta esse “NavigationController”. Então vamos voltar no arquivo, colocar aqui uma vírgula, “UINavigationControllerDelegate”. Já fizemos o que precisava para ele entender que quem vai implementar os métodos vai ser esse arquivo que nós criamos.

Vamos ver se está funcionando? Eu vou deixar, por exemplo, um breakpoint, e vou rodar o aplicativo novamente pra nós testarmos. Vamos lá. Estou com meu iPhone aqui, vou clicar no “+” e agora eu vou clicar na foto. Selecionei, tirei uma foto e vou clicar em “Use”. Cliquei e caiu exatamente no breakpoint que eu havia colocado. Então está funcionando, nós conseguimos fazer com que o nosso ImagePickerController entendesse que quem vai implementar os métodos de delegate dele é esse arquivo que nós criamos.

Só que nós temos aqui a foto e nós não estamos fazendo nada com ela por enquanto. Se você reparar, nós só estamos extraindo a foto. Será que é só isso que nós precisamos? Não é. Com a foto, nós precisamos setar no nosso outlet, que é esse outlet que tem aqui em cima, “imageAluno”, é ele que nós vamos utilizar.

Como que faz pra nós mandarmos essa foto pra esse arquivo novamente? Uma boa saída seria nós utilizarmos um protocolo. Vamos fazer isso? Vou vir aqui, “protocol”, qual vai ser o nome dele? “ImagePickerFotoSelecionada”, esse é o nome do meu protocolo. E aqui eu vou criar um método, “func imagePickerFotoSelecionada”. Qual é o parâmetro que eu vou mandar? A “foto”. Qual é o tipo dela? É uma “UIImage”.

Feito isso nós temos um protocolo em que nós vamos disparar, vamos implementar nesse arquivo e nós vamos conseguir passar foto pra lá. Nós precisamos criar aqui um delegate, do tipo do protocolo que nós criamos. Vou colá-lo aqui e vou deixar optional, porque nós não sabemos se vai ter ou não valor esse cara, por isso nós vamos ter que tratar.

Quando que nós vamos chamar esse método que criamos? Quando nós vamos passar essa foto? Quando ele clicar em usar a foto, então nós podemos fazer o seguinte, “delegate.” o nome do método, “imagePickerFotoSelecionada”, e nós passamos a foto, que é essa constante que nós extraímos do dicionário que veio na assinatura desse método.

Só que pra tudo isso funcionar, nós precisamos implementá-lo aqui, nesse AlunoViewController. O primeiro passo é nós criarmos um novo método onde vamos deixar essas configurações de delegate, então vou criar o método “setup”. Está vendo que nós criamos aqui a constante, que é do tipo da classe que nós criamos o protocolo? Então eu vou pegá-lo agora, “imagePicker.delegate = selfie”.

Quando nós fazemos isso, nós precisamos agora utilizar o protocolo, que é esse protocolo aqui, “ImagePickerFotoSelecionada”. Então vamos vir aqui em cima, colocar uma vírgula, “ImagePickerFotoSelecionada”.

Agora que nós já importamos o protocolo ImagePickerFotoSelecionada aqui no ViewController, nós podemos utilizar o método que nós criamos lá. Aqui embaixo eu vou criar um novo marcador, “MARK:” e vou chamá-lo de “Delegate”, que vai ser onde vão ficar todos os métodos delegate que nós formos utilizar. Então vou chamar “imagePickerFotoSelecionada”, agora pego o outlet. Qual é o nome do outlet? “imageAluno.image = foto”, que vem aqui por parâmetro.

Feito isso nós já estamos setando a foto que está vindo na assinatura do método no outlet que nós temos aqui no ViewController. Pra funcionar nós só precisamos chamar agora esse método setup, então vou chamá-lo aqui em cima, “setup”. Agora sim nós vamos testar a nossa implementação.

Com o app rodando no meu iPhone eu vou clicar no “+” e agora vou clicar em “foto”. Vou tirar uma foto e vou clicar em usar. Cliquei em usar e agora ele está setando a foto que nós tiramos no nosso formulário. Com isso nós conseguimos utilizar a câmera pra fazer várias outras coisas. Nesse caso nós estamos utilizando pra um formulário.

Recapitulando, primeiro nós precisamos fazer uma validação pra verificar se a câmera está disponível ou não. Se for simulador vai dar crash. Então nós precisamos fazer essa validação. Depois nós precisamos vir nesse arquivo, “Info.plist” e pedir autorização do usuário pra conseguirmos utilizar esse recurso do dispositivo dele.

Feito isso é só nós utilizarmos os métodos de delegate do ImagePickerController e setar a imagem que ele devolve no lugar que nós precisarmos utilizar. Na próxima aula nós vamos aprender a utilizar a biblioteca do iOS. Até daqui a pouco.

Acessando a câmera do iPhone/iPad - Utilizando a biblioteca de fotos

Agora que acabamos de implementar a funcionalidade da câmera no nosso app, é hora da aprendermos como que nós utilizamos a biblioteca de imagens do iOS, porque, pensando bem, se eu vir aqui no “+” e clicar em “foto” e tiver com o app buildado em um device de verdade, ele vai abrir a câmera.

Mas não é toda hora que nós queremos tirar foto naquele momento e usar em algum aplicativo, geralmente nós já temos alguma foto na nossa biblioteca que nós gostaríamos de utilizar. Então o melhor caminho é deixarmos essas duas opções, o usuário ter a possibilidade de tirar a foto na hora e também a possibilidade de ele conseguir acessar a biblioteca de fotos do iOS. É isso que nós vamos ver agora.

O primeiro passo é criarmos um menu para aparecer e mostrar essas opções para o usuário. Então quando ele clicar no botão “foto” não vai abrir a câmera direto, vai aparecer um menu e vai ter a opção tirar foto ou acessar a biblioteca. Para fazer isso tem um componente que nós usamos no iOS que se chama action sheet, é ele que nós vamos implementar.

Abrindo a pasta “Componentes” nós vamos no arquivo “ImagePicker”, e vamos criar um método pra montar esse menu. Deixa eu dar alguns espaços pra ficar com a visualização melhor. Vou criar um método pra montar o menu, então “func menuDeOpcoes()” ele vai retornar um UI Alert Controller, que é o componente que nós vamos usar pra mostrar o menu. Então vou colocar aqui o retorno “UIAlertController”, beleza.

Agora nós precisamos criar um Alert Controller, então vou declarar aqui uma constante, que vai se chamar “menu” e ela vai ser igual a “UIAllertController”. No método construtor dele eu tenho que passar algumas informações, como título, então aqui eu posso pôr, por exemplo, “Atenção”. A mensagem eu vou colocar “escolha uma das opções abaixo” e o estilo dele eu vou selecionar o estilo “actionSheet”, que é o que nós vamos utilizar.

O action sheet é o que tem mais opções, o alert é um alerta normal, só tem opção de cancelar e ok, então o que nós vamos utilizar é o action sheet. Como o menu já está criado, eu vou dar um “return” e vou retornar já o menu nessa função, pra ele não ficar apontando nenhum erro no nosso código.

O que nós precisamos fazer? Agora nós já criamos o menu, precisamos adicionar quais opções o menu vai ter. Então ele vai ter a opção de tirar foto e a opção de acessar a biblioteca. Pra criar essas opções, como que eu faço? Vou criar outra constante, a primeira vai ser a câmera, então “camera”. A câmera vai ser um “UIAlertAction”, que é um botão que vai ter no nosso menu, então eu vou inicializá-la passando o título, vou pôr, por exemplo, “tirar foto”. O estilo dela vai ser um estilo “default”.

E aqui repara que é uma closure, então se eu apertar o “enter” eu posso dar um nome, eu vou pôr, por exemplo, “acao”, e aqui dentro é o que nós vamos fazer quando o usuário clicar na opção câmera no nosso menu, então aqui nós ainda vamos implementar, vou deixar aqui um comentário.

Depois que nós criamos a opção, nós precisamos adicionar essa opção no menu, como nós fazemos isso? Vamos em “menu.addAction” e nós passamos a opção que nós criamos, que no caso foi a câmera, foi essa opção que nós criamos.

Além da câmera, agora nós temos também a biblioteca, que é o que nós precisamos. Então eu vou criar outro Alert Action e vou instanciá-lo. O nome dele vai ser “biblioteca”, vai ser a opção biblioteca, o estilo dele também vai ser o default e aqui também tem uma closure que nós vamos implementar alguma ação, que vamos ver logo. Então “implementar”, deixa aqui para nós não esquecermos. Eu vou pegar o menu e vou dar um “addAction” e aqui nós passamos a biblioteca.

Feito isso, o menu já está ok. Nós criamos já o action sheet, agora nós precisamos tratar os eventos de quando o usuário escolhe uma das opções, se ele escolher câmera, eu preciso de alguma forma falar pro View Controller que o usuário quer exibir a câmera. Se eu escolher a biblioteca, eu tenho que falar pra esse View Controller que o usuário quer acessar a biblioteca.

Pra fazer isso nós podemos utilizar uma closure na assinatura do nosso método, então nós passamos a opção que o usuário escolheu e no View Controller nós tratamos qual foi a opção. Então nós vamos fazer isso.

Pra ficar ainda mais organizado, nós vamos criar um “enum” aqui em cima pra colocar essas opções. Vou digitar “enum” e aqui nós vamos dar um nome, eu vou pôr por exemplo, “MenuOpcoes”. Qual vai ser a primeira? Vai ser a “camera”, e depois nós temos a “biblioteca”, então vão ser essas duas opções possíveis aqui.

Agora na assinatura do método nós podemos fazer um bloco de completion, ou seja, quando nós implementarmos essa função eu vou conseguir saber qual é o botão que o usuário vai clicar. Então aqui eu vou pôr um “completion”, nós vamos passar qual foi a opção que o usuário vai escolher, vou colocar aqui “opcao:”.

A opção vai ser do tipo do enum que nós criamos aqui, então eu vou copiar ele, vou descer no nosso método e vou colá-lo aqui, então essa variável opção vai ser algum desses dois cases, ou vai ser a câmera ou vai ser a biblioteca. Então vamos tratar isso lá. Aqui eu tenho que colocar um “Void” na nossa closure.

Feito isso, agora nós precisamos falar qual vai ser a opção que nós queremos que acione quando o usuário clicar em câmera. Então vou pegar aqui o “completion”, menu de opções, então se ele clicar em câmera eu vou mandar a opção câmera, que é o que faz sentido, e se ele clicar em biblioteca eu vou chamar o completion e vou passar a opção da biblioteca.

Além dessas duas opções, é legal também nós criarmos um botão para o usuário conseguir cancelar, porque imagine só que ele clicou sem querer no botão de tirar foto e vai aparecer o menu, então é interessante termos essa opção de cancelar. Então nós vamos criá-la aqui, “cancelar”, vai ser uma Alert Action também, vamos inicializá-la aqui, e damos o nome de “cancelar” mesmo, e o estilo não vai ser mais o default, o estilo que nós vamos pegar vai ser o “cancel”.

E nessa closure nós não vamos querer fazer nada, quando o usuário clicar em cancelar nós só queremos que o menu desapareça e isso ele já faz por padrão. Então aqui nós vamos passar o “nil”. Agora pegamos o menu, damos um “addAction” e passamos o botão cancelar que nós criamos.

Nós terminamos a implementação do nosso menu, agora nós precisamos utilizá-lo no View Controller, então vamos voltar pra lá? Vou clicar no “AlunoViewController”. Aqui é a implementação que nós fizemos da câmera. Eu vou criar então o nosso menu, “let menu = ImagePicker”, que é o cara que nós criamos, “.menuDeOpcoes”.

Como é uma closure que nós fizemos o de completion, nós podemos colocar, por exemplo, “opcao”, agora nós conseguimos tratar qual foi a opção que o usuário escolheu. E aqui nós vamos apresentar para o usuário o nosso menu, então vou dar um “present” e aqui eu passo o menu. Menu, animado verdadeiro, e aqui eu passo o “nil”.

Agora eu vou criar um método pra nós tratarmos se é a biblioteca ou a câmera que nós vamos ter que exibir. Vou criar aqui outro método, “mostrarMultimidia()”, o que eu vou receber como parâmetro? Eu vou receber uma opção. Então vou colocar aqui “opcao”, que ela é do tipo do enum que nós criamos no Image Picker.

E aqui o que eu faço? Eu chamo esse cara. Como eu estou dentro de uma closure eu preciso pôr o “self” e dou um “mostrarMultimidia”, e eu passo a opção que o usuário escolheu. Para não ficar opção, opção, nós podemos ocultar esse primeiro parâmetro, então se eu colocar um “_” e der um espaço, eu não preciso mais passar de novo, duas vezes opção. Fica mais legível dessa forma.

Agora essa implementação da câmera, eu vou pegá-la, vou recortar daqui e vou colá-la dentro desse método, que é aqui que nós vamos tratar. O que nós precisamos? Nós precisamos do Image Picker Controller, então vou tirá-lo daqui, passar pra cá. Nós precisamos setar o seu delegate, independente da opção que estiver. O source nós precisamos tratar, se for câmera nós exibimos a câmera, então eu vou fazer aqui um “if”, a opção que nós recebermos por parâmetro, então vou pegar aqui “if”.

Só que não basta ela ser só opção câmera, ela tem que ser opção câmera e tem que estar disponível para o iOS exibir isso, então eu tenho que colocar aqui um “&”. Se for a opção câmera e estiver disponível, nós mudamos o source do multimídia aqui pra câmera, se não, nós exibimos a biblioteca. Deixa-me tirar esse “present” daqui, colar aqui e tirar esse “if” pra fora. Se não for a câmera, eu exibo a biblioteca do iOS.

Pra exibir a biblioteca tem uma opção no próprio enum pra isso, que é essa “photoLibrary”, então nós vamos pegar esse cara aqui, e no final nós exibimos qual foi a multimídia que o usuário escolheu. Feito isso, agora nós já podemos testar. Vamos rodar o aplicativo e ver como ficou a nossa implementação.

Eu vou dar um rodar aqui. Vou clicar no “+”. Como eu estou rodando o app no simulador, eu não vou ter acesso à câmera, mas a biblioteca nós conseguimos ver. Cliquei no botão “foto”, repara que apareceu um menu com as opções. Então “tirar foto”, eu consigo ver se eu estiver no meu iPhone, a biblioteca eu consigo acessar, ele vai mostrar para mim a biblioteca do iOS, inclusive eu posso pegar alguma imagem padrão. Vou clicar aqui e nós já conseguimos setar a imagem no nosso formulário.

Se eu clicar de novo aqui, repara que tem a opção “cancelar”, que nós também criamos. Clico em “cancelar” e ele dispensa o menu.

Essa parte do formulário nós já matamos. Nós conseguimos tirar uma foto, conseguimos acessar a biblioteca do iOS. Agora nós precisamos preencher o formulário, colocar uma nota pro aluno e salvar esse aluno na nossa agenda. Como é que salva esse aluno na nossa agenda? Nós vamos ver daqui a pouco.

Sobre o curso iOS parte 1: Usando recursos nativos

O curso iOS parte 1: Usando recursos nativos possui 193 minutos de vídeos, em um total de 52 atividades. Gostou? Conheça nossos outros cursos de iOS em Mobile, ou leia nossos artigos de Mobile.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda iOS acessando integralmente esse e outros cursos, comece hoje!

  • 1184 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

Premium

  • 1184 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$75
à vista R$900
Matricule-se

Premium Plus

  • 1184 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$100
à vista R$1.200
Matricule-se

Max

  • 1184 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$120
à vista R$1.440
Matricule-se
Procurando planos para empresas?
Acesso por 1 ano
Estude 24h/dia onde e quando quiser
Novos cursos toda semana