UIView поверх клавиатуры, похожее на приложение iMessage

в настоящее время я пытаюсь в основном реализовать и точную копию приложения Apples iMessage.

Это означает, что мне нужен UITextView, который прикреплен к в нижней части экрана и перемещается вверх, когда становится firstResponder. - На самом деле это довольно просто. Есть миллионы способов сделать это, и два из самых распространенных - это, конечно, анимация вида вверх или вниз при уведомлении был получен. Другой - сделать это через inputAccessoryView . К сожалению, некоторые функции у одного есть, а у другого нет. И они кажутся быть взаимоисключающими.

Большой проблемой является вращение .

Я просмотрел как минимум семь различных проектов на github, все они повторно реализуют ту же функциональность / поведение, которых я пытаюсь достичь, но буквально все они терпят неудачу.

Например, HPGrowingTextView, который используют официальные приложения Facebook / FacebookMessenger / (и, возможно, WhatsApp), представляет собой один большой кусок мусорного кода. Возьмите свое iDevice, откройте приложение Facebook, перейдите в чат, откройте клавиатуру и поверните устройство. Если вы обратите внимание, вы заметите, что полоса ввода слегка подскакивает и оставляет пустое пространство между рамкой клавиатуры и ее собственным. Затем взгляните на реализацию Apple в iMessage, когда отображается клавиатура. Идеально.

Помимо этого, взлом contentOffset и EdgeInset, который использует библиотека HPGrowingTextView, вызывает у меня кошмары.

Итак, я хотел сделать это сам и начать с нуля.

Прямо сейчас у меня есть очень изящная, элегантная и не требующая взлома реализация растущего UITextView, но одна часть отсутствует.

Элегантное вращение.

Когда я просто настраиваю кадры на их новые позиции в методе willRotateToInterfaceOrientation: duration:, все работает отлично, НО у меня та же проблема, что и у HPGrowingTextView (см. Приложение Facebook). Небольшой промежуток между окном ввода и клавиатурой во время вращения.

Я обнаружил, что при повороте устройства в альбомную ориентацию отображаемая в данный момент портретная клавиатура не "трансформируется", а скорее исчезает (отправляет уведомление 'willHide'), и снова появляется альбомная версия (отправка уведомления 'willShow') . Переход - это очень тонкое затухание и, возможно, некоторое изменение размера.

Я повторно реализовал свой проект, используя inputAccessoryView, чтобы посмотреть, что происходит дальше, и был приятно удивлен.InputAccessoryView вращается идеально синхронно с клавиатурой. Между ними нет места / разрыва.

К сожалению, я еще не придумал, как сделать так, чтобы док inputAccessoryView располагался в нижней части экрана, а НЕ исчезал / перемещался из него вместе с клавиатурой ...

Что я не хочу - это такие хакерские решения, как ... "немного опустить фрейм в CoordinateSystem toInterfaceOrientation, а затем переместить его обратно, когда был вызван didRotateFrom ..."

Я знаю еще одно приложение, в котором есть удалось реализовать такое поведение и это «Кик Мессенджер».

Есть ли у кого-нибудь идея, совет или ссылка по этой теме, которых я еще не видел?

Большое спасибо!

Примечание: как только эта проблема будет решена, я открою исходный код проекта для всех, чтобы получить прибыль, потому что почти все реализации, которые мне удалось найти в течение последних нескольких дней, представляют собой беспорядок.

26
задан pkluz 11 December 2011 в 21:59
поделиться