Movendo UIView usando Protocol
Quando pensamos em iMessage, WhatsApp, Skype, entre outros que existem, fica a dúvida: como funciona aquela input bar que se move quando o keyboard aparece? Na verdade não existe segredo nenhum. Com um simples protocolo podemos reproduzir essa ação.
Definindo o protocolo Keyboardable
“layoutConstraintsForKeyboard” — Define quais constraints serão manipuladas
“addValueForKeyboard” — Define valores a adicionar para as constraints
“addKeyboardObservers” — Responsável por iniciar os observers
“removeKeyboardObservers” — Remover os observers
Para que tudo funcione perfeitamente o protocol Keyboardable precisa ter seus métodos implementados. Vamos utilizar um extension para isso.
where Self: UIViewController isso adiciona uma regra que informa ao protocolo que será disponível somente para UIViewController.
No método addKeyboardObservers nós adicionamos dois observer para NSNotificationCenter:
1º UIKeyboardWillShowNotification — Envia uma notificação quando a keyboard irá aparecer.
2º UIKeyboardWillHideNotification — Envia uma notificação quando a keyboard irá desaparecer.
“keyboardWillShow” e “keyboardWillHide” são os métodos que são executados quando a NSNotificationCenter recebe uma notificação do UIKeyboardWillShowNotification e UIKeyboardWillHideNotification. Esses métodos entregam um objeto do tipo NSNotification que contém informações referente ao keyboard, e o método getKeyboardInfo converte esse objeto e retorna o KeyboardHeightDuration.
“public typealias KeyboardHeightDuration = (height: CGFloat, duration: Double)”
E por fim, iremos animar as constraints através do método animateConstraints.
Como implementar na ViewController
Adicione um UIView similar ao exemplo abaixo:
Em seguida ligue o “Outlets” da constraint referente à parte debaixo da UIView
Implementado o protocolo na ViewController
O resultado final:
Conclusão
Descrevemos como é simples criar e implementar protocolos para mover uma UIView similar a Apps de Messages, além disso, facilita o desenvolvimento e mantém o seu código organizado.
Segue o link do projeto :