В Управлении документацией Клавиатуры:
UIKeyboardFrameBeginUserInfoKey ключ для объекта NSValue, содержащего CGRect, который определяет кадр запуска клавиатуры в координатах экрана. Эти координаты не принимают во внимание, что любые факторы вращения относились к содержанию окна в результате интерфейсных изменений ориентации. Таким образом Вы, возможно, должны преобразовать прямоугольник в координаты окна (использующий convertRect:fromWindow: метод) или просмотреть координаты (использующий convertRect:fromView: метод) перед использованием его.
UIKeyboardFrameEndUserInfoKey ключ для объекта NSValue, содержащего CGRect, который определяет кадр конца клавиатуры в координатах экрана. Эти координаты не принимают во внимание, что любые факторы вращения относились к содержанию окна в результате интерфейсных изменений ориентации. Таким образом Вы, возможно, должны преобразовать прямоугольник в координаты окна (использующий convertRect:fromWindow: метод) или просмотреть координаты (использующий convertRect:fromView: метод) перед использованием его.
Из чего значение start frame
и end frame
? Каково различие между ними?
Начальный кадр - это место, где клавиатура находится в начале анимации: за кадром, если клавиатура отображается, или на экране, если клавиатура скрыта. Конечный кадр - это место, где клавиатура будет в конце анимации: наоборот. Вы можете использовать разницу между ними, чтобы написать единственный метод, который отвечает как на скрытие, так и на отображение клавиатуры.
Не забудьте также использовать UIKeyboardAnimationCurveUserInfoKey
и UIKeyboardAnimationDurationUserInfoKey
при анимации изменений вашего представления: так ваша анимация и анимация ОС будут синхронизированы.
Еще один совет: документация, на которую вы ссылаетесь, гласит: «Прямоугольник, содержащийся в свойствах UIKeyboardFrameBeginUserInfoKey и UIKeyboardFrameEndUserInfoKey словаря userInfo, должен использоваться только для информации о размере, которую он содержит. Не используйте источник прямоугольника (который всегда {0.0, 0.0}) в операциях пересечения прямоугольника ». По крайней мере, на iPad на OS 3.2 это не так. Оба прямоугольника имеют одинаковый размер, а начало координат в экранных координатах у них разное.
Вы можете найти этот вопрос полезным: UIKeyboardBoundsUserInfoKey устарел, что использовать вместо этого?