Concrete Logo
Hamburger button

3D Touch – Como implementar? – Tutorial

  • Blog
  • 26 de Abril de 2016
Share

*Este post foi originalmente publicado no Medium pessoal da autora. Acesse aqui.

Ontem, na primeira parte deste post, eu apresentei o que é a tecnologia 3D Touch e como diferentes aplicativos estão utilizando. Hoje, vou mostrar como implementar esse novo gesto na forma de Peek and Pop, Menu de Ações Rápidas e Detector de Pressão. O projeto completo, que inclui os códigos descritos aqui, está disponível no Github.

Peek and Pop

Primeiro vamos ensinar como implementar o chamado Peek and Pop. Neste tutorial vamos usar duas view controllers: uma chamada PeekAndPopViewController, que tratará o 3D Touch, e a PreviewViewController, que conterá a prévia do conteúdo a ser mostrado.

Exemplo de Peek and Pop

Exemplo de Peek and Pop

Para começar, é preciso implementar o protocolo UIViewControllerPreviewingDelegate na PeekAndPopViewController:

Depois, é preciso saber se o 3D Touch é suportado pelo aparelho e se ele está habilitado. Para isso, escreva o seguinte método:

Feito isto, precisamos registrar o objeto que irá tratar os métodos de Peek and Pop (no caso a PeekAndPopViewController) e a view escolhida para suportar o 3D Touch (que será a própria view da view controller). Isto será feito dentro do método traitCollectionDidChange: garantindo que a view controller seja registrada sempre que o usuário deixar o 3D Touch habilitado e que esse registro seja cancelado quando o gesto for desabilitado.

Agora é implementar o Peek and Pop propriamente dito, por meio dos métodos do protocolo UIViewControllerPreviewingDelegate. No primeiro, é preciso instanciar a view controller que se quer ter como prévia (Peek). No segundo, é preciso definir como ela será chamada (Pop).

Com isso, o Peek and Pop já estará funcionando. Caso deseje implementar um menu durante o Peek, vá na PreviewViewController e implemente o método previewActionItems. O código a seguir mostra um array de ações, nas quais é possível configurar o título e o estilo (UIPreviewActionStyleDefaultUIPreviewActionStyleDestructive e UIPreviewActionStyleSelected) de cada uma.

É possível também mostrar um menu de grupos de ações. Para isso, basta comentar a linha return action e remover o comentário do código acima.

Menu de Ações Rápidas

Existem dois tipos de Ações Rápidas (“Quick Actions”): dinâmico e estático. A diferença entre eles é que no primeiro caso os atalhos só serão mostrados depois que o aplicativo for aberto pelo menos uma vez, enquanto que no segundo basta o aplicativo estar instalado para ser mostrado. Outro fato é que, caso o menu dinâmico seja alterado, ele só será atualizado depois que o aplicativo for aberto.

post 2 2

No caso dinâmico, os atalhos serão implementadas no AppDelegate. Para criar o menu, escreva o método createDynamicShortcut (mostrado a seguir) e o chame em application:didFinishLaunchingWithOptions:

onde:

No método arrayOfDynamicShortcutItems são mostradas diferentes formas de implementar um atalho no menu (aqui chamado de shortcutItem). Os parâmetros passados para criar um atalho são:

  • type: uma string que será usada pra saber qual atalho foi selecionado;
  • localizedTitle: título do atalho;
  • localizedSubtitle: subtítulo do atalho;
  • icon: imagem que aparece no atalho, podendo ser nativo, como mostrado no icon2, ou personalizado, como visto no icon3;
  • userInfo: um dicionário com informações adicionais para o atalho.

Agora é preciso tratar quando um atalho é acionado. Se o aplicativo estiver em background e um item do menu for selecionado, o método application:performActionForShortcutItem:completionHandler: do AppDelegate será chamado. Sendo assim, este será sobrescrito:

onde:

e:

Na variável global dictVc é criado um dicionário com keys, que são as mesmas citadas nas types dos shortcutItems, e as view controllers associadas. O método viewControllerToBeLauched: irá pegar o type do shortcutItem e retornar a view controller respectiva. Por último, o método lauchVcWithShortcutItem: irá mostrar essa view controller do modo mais apropriado.

Caso o aplicativo não estiver em background e um item do menu for selecionado, este será tratado nos métodos application:didFinishLaunchingWithOptions: e applicationDidBecomeActive:, ficando da seguinte forma:

onde:

O método checkIfAShortcutWasLaunchedAndSetItInAGlobalParam: irá verificar se o aplicativo foi aberto por meio do menu. Em caso afirmativo, ele salvará o shortcutItem em uma variável global. Assim, o método application:didFinishLaunchingWithOptions: retornará NO, impedindo que o método application:performActionForShortcutItem:completionHandler: seja chamado. Logo em seguida, quando o aplicativo se torna ativo, o método applicationDidBecomeActive: é chamado e a view controller relacionada ao shortcutItem selecionado será mostrada.

Para criar atalhos estáticos, basta adicioná-los em um array na Info.plist, como mostramos abaixo:

post 2 3

Para configurar um atalho é preciso usar as keys:

  • UIApplicationShortcutItemType
  • UIApplicationShortcutItemTitle
  • UIApplicationShortcutItemSubtitle
  • UIApplicationShortcutItemIconType ou UIApplicationShortcutItemIconFile
  • UIApplicationShortcutItemUserInfo

O tratamento destes atalhos é feito no AppDelegate, da mesma forma que é feito com os atalhos dinâmicos.

Detector de pressão

post 2 4

No projeto, o detector de pressão será mostrado na classe TestPressureViewController. Primeiro escrevemos o método que irá verificar se o 3D Touch poderá ser usado, da mesma forma que foi discutido ao implementar o Peek and Pop:

Se não puder, será mostrado um alerta por meio do método traitCollectionDidChange:

O próximo passo é sobrescrever os métodos de touch da view:

na qual:

As classes UITouch receberam dois novos parâmetros no iOS 9: forcemaximumPossibleForce. O parâmetro force mostra o valor relativo da pressão exercida, no qual o valor igual a 1 representa a força média de um toque. Já o maximumPossibleForce é a força máxima detectada por um toque. Neste exemplo, mostramos o valor da pressão exercida relativa a máxima detectada.

Com isso, chegamos ao fim do post sobre as diferentes formas de usar o 3D Touch. Qualquer dúvida, só escrever nos comentários 😉

É desenvolvedor iOS e quer fazer parte do nosso time? Clique aqui!