iOS 13 sob a lupa

O tipo dinâmico é bom, mas nem sempre funciona. Agora, mostrarei como os controles pequenos no iOS 13 aumentam de graça, sem registro e SMS.


Em um artigo anterior, selecionamos o tipo de dinâmica no menu do aplicativo iOS do Dodo Pizza. Acabou muito bem. Mas a barra de guias no menu era tão pequena quanto era - não muda dependendo da configuração do tamanho do texto.


Esse recurso ainda não chegou ao lançamento, pelo qual tenho vergonha e vergonha

"Mas como está, Dodo?" Você não se importa com pessoas com deficiência visual?
Desculpe!

Um pouco sobre o modo embutido "Lupa"


A barra de guias do sistema mostra uma visualização de cada guia com um toque longo. Tente incluir o tamanho do texto "disponível" e pressione e segure em qualquer guia na guia do sistema (por exemplo, em Música ou Foto). O seguinte pop-up aparecerá na tela:


Além da barra de guias, o modo "lupa" é suportado por botões nas barras de navegação e barras de ferramentas:


Campos de pesquisa:


E mais alguns controles.

E, começando no iOS 13, podemos adicionar facilmente o mesmo comportamento aos nossos controles.

Como prender UILargeContentViewerItem ao aplicativo


Infelizmente, esse protocolo é pouco descrito na documentação, mas isso não importa, porque sua API parece bastante simples:

@available(iOS 13.0, *) public protocol UILargeContentViewerItem : NSObjectProtocol { var showsLargeContentViewer: Bool { get } var largeContentTitle: String? { get } var largeContentImage: UIImage? { get } var scalesLargeContentImage: Bool { get } var largeContentImageInsets: UIEdgeInsets { get } } 

É suficiente implementar vários desses métodos, cujos nomes falam por si, e seu controle mostrará uma visualização grande em um toque longo.

Implementação muito simples


Vamos tentar este protocolo em algum botão no aplicativo. Por exemplo, no botão i no cartão do produto:


Adicione 3 linhas de código:

 nutritionButton.showsLargeContentViewer = true nutritionButton.addInteraction(UILargeContentViewerInteraction()) nutritionButton.largeContentTitle = nutritionButton.accessibilityValue 


Feito. Legal, né?

Só aqui é o ícone par, que é puxado por padrão, eu não gosto. Será melhor se não for de duas cores, mas de uma cor com a forma recortada da letra i . Isso é usado apenas para o estado do botão .highlighted.

 nutritionButton.largeContentImage = nutritionButton.image(for: .highlighted) 


Norma

E agora vamos encerrar na extensão:

 extension UIView { public func enableLargeContent(title: String? = nil, image: UIImage? = nil, scales: Bool = true, insets: UIEdgeInsets = .zero) { guard !showsLargeContentViewer else { return } showsLargeContentViewer = true addInteraction(UILargeContentViewerInteraction()) largeContentTitle = title largeContentImage = image scalesLargeContentImage = scales largeContentImageInsets = insets } } 

 nutritionButton.enableLargeContent(title: nutritionButton.accessibilityValue, image: nutritionButton.image(for: .highlighted)) 

De fato, muitos controles iOS padrão já implementam alguns dos métodos deste protocolo. E esse modo está desativado, porque você precisa realmente aumentar o conteúdo, em vez de esconder tudo atrás de uma lupa.

Reformulei: use esse recurso apenas como último recurso, quando você realmente não puder aumentar o controle.
A documentação para essa coisa toda está disponível no Xcode se você abrir a interface UILargeContentViewerItem .


Projeto de demonstração no meu repositório no GitHub

Source: https://habr.com/ru/post/pt463151/


All Articles