Implementando Seleção de Imagens Estilo iMessage no iOS com ImagePickerSheetController

O ImagePickerSheetController é uma biblioteca para iOS projetada para replicar a interface de seleção de mídia encontrada no iMessage. Ela oferece uma alternativa moderna ao UIImagePickerController padrão, permitindo que desenvolvedores criem fluxos de seleção de fotos e vídeos com uma experiência de usuário (UX) fluida e integrada, similar ao comportamento de um UIAlertController.

Vantagens da Biblioteca

  • Interface Familiar: O design baseado no iMessage reduz a curva de aprendizado para o usuário final.
  • Multisseleção Nativa: Suporte nativo para escolha de múltiplos arquivos de mídia de forma simultânea.
  • Flexibilidade de Ações: Permite adicionar botões customizados para câmera, biblioteca ou ações específicas da aplicação.
  • API Amigável: A sintaxe é fortemente inspirada no sistema de ações do iOS, facilitando a adoção por desenvolvedores que já conhecem o ecossistema UIKit.

Configuração do Ambiente

Gerneciadores de Dependências

Você pode integrar o componente via CocoaPods adicionando a seguinte linha ao seu Podfile:

pod "ImagePickerSheetController", "~> 0.9.1"

Para usuários de Carthage, inclua no seu Cartfile:

github "lbrndnr/ImagePickerSheetController" ~> 0.9.1

Permissões Necessárias

Como a biblioteca interage diretamente com dados privados do usuário, é obrigatório declarar as justificativas de uso no arquivo Info.plist:

<key>NSCameraUsageDescription</key>
<string>Precisamos de acesso à câmera para capturar fotos.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>Precisamos de acesso à sua galeria para selecionar imagens.</string>

Exemplo Prático de Implementação

Abaixo, apresentamos uma forma de configurar o controlador com suporte a captura de mídia e acesso à galeria:

let pickerSheet = ImagePickerSheetController(mediaType: .imageAndVideo)

// Ação para capturar nova foto ou adicionar comentário
let cameraAction = ImagePickerAction(
    title: "Tirar Foto",
    secondaryTitle: "Adicionar Legenda",
    handler: { _ in
        self.abrirInterfaceDeCamera(.camera)
    },
    secondaryHandler: { _, totalImages in
        print("Usuário deseja legendar \(totalImages) imagens")
    }
)
pickerSheet.addAction(cameraAction)

// Ação para abrir a biblioteca de fotos
let libraryAction = ImagePickerAction(
    title: "Galeria de Fotos",
    secondaryTitle: { count in
        return "Enviar \(count) selecionada(s)"
    },
    handler: { _ in
        self.abrirInterfaceDeCamera(.photoLibrary)
    },
    secondaryHandler: { _, _ in
        let assetsSelecionados = pickerSheet.selectedImageAssets
        print("Processando assets: \(assetsSelecionados)")
    }
)
pickerSheet.addAction(libraryAction)

// Botão de Cancelar
pickerSheet.addAction(ImagePickerAction(title: "Cancelar", style: .cancel))

// Apresentação do controlador
self.present(pickerSheet, animated: true, completion: nil)

Explorando Funcionalidades Principais

Tipos de Mídia

O controlador pode ser filtrado através do enum ImagePickerMediaType:

  • .image: Exibe apenas fotografias.
  • .video: Focado em arquivos de vídeo.
  • .imageAndVideo: Modo híbrido que permite ambos.

Customização de Botões

Cada ImagePickerAction pode assumir estados diferentes. O "título secundário" é exibido dinamicamente assim que o usuário seleciona uma imagem na pré-visualização, permitindo que botões estáticos (como "Galeria") se transformem em botões de ação imediata (como "Enviar 3 Fotos").

Internacionalização (i18n)

Para aplicações que suportam múltiplos idiomas, a biblioteca integra-se bem com arquivos .stringsdict, permitindo tratar regras de pluralização para as labels de contagem de fotos de forma automática.

Requisitos e Compatibilidade

  • Versão mínima do iOS: 9.0
  • Frameworks dependentes: Photos.framework
  • Lingaugem: Swift

Para projetos que visam exclusivamente o iOS 10 ou superior e buscam uma interface ainda mais moderna (estilo "gaveta"), o mesmo autor disponibiliza o ImagePickerTrayController, que segue os princípios de design das versões mais recentes do sistema operacional.

Tags: ios swift uikit photos-framework mobile-development

Publicado em 6-4 00:06 por Thomas