Movendo UIView usando Protocol

Bruno Fernandes
2 min readSep 20, 2016

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:

ViewController

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 :

--

--