UIKeyboardFrameBeginUserInfoKey & UIKeyboardFrameEndUserInfoKey

В разделе "Управление клавиатурой" documentation:

UIKeyboardFrameBeginUserInfoKey ключ для объекта NSValue, содержащий CGRect, который идентифицирует начальный кадрклавиатуры в экранных координатах. Эти координаты не принимают учитывайте любые применяемые коэффициенты вращения к содержимому окон в результате изменения ориентации интерфейса. Таким образом, вам может потребоваться преобразовать прямоугольник в координаты окна (используя convertRect: fromWindow: метод) или для просмотра координат (используя convertRect: fromView: метод) до используя его.

UIKeyboardFrameEndUserInfoKey Ключ для объекта NSValue, содержащего CGRect, который идентифицирует конечный фреймклавиатуры в экранных координатах. Эти координаты не принимают учитывайте любые применяемые коэффициенты вращения к содержимому окон в результате изменения ориентации интерфейса. Таким образом, вам может потребоваться преобразовать прямоугольник в координаты окна (используя convertRect: fromWindow: метод) или для просмотра координат (используя convertRect: fromView: метод) до используя его.

В чем смысл start frame и end frame? В чем разница между ними?

Ответ 1

Начальный кадр - это место, где клавиатура находится в начале анимации: вне экрана, если клавиатура отображается, или на экране, если клавиатура скрыта. Конечный кадр - это место, где клавиатура будет в конце анимации: наоборот. Вы можете использовать разницу между ними, чтобы написать один метод, который реагирует как на скрытие, так и на отображение клавиатуры.

Обязательно используйте UIKeyboardAnimationCurveUserInfoKey и UIKeyboardAnimationDurationUserInfoKey при изменении анимации вашего вида: таким образом, ваши анимации и анимации ОС будут синхронизироваться.

Еще один намек: документация, связанная с состояниями: "Прямоугольник, содержащийся в свойствах UIKeyboardFrameBeginUserInfoKey и UIKeyboardFrameEndUserInfoKey словаря пользовательской информации, должен использоваться только для информации о размере, которую он содержит. Не используйте источник прямоугольника (который всегда {0.0, 0.0}) в операции пересечения прямоугольника". По крайней мере, на iPad на OS 3.2 это не так. Оба прямоугольника имеют одинаковый размер, а начало координат, которое находится в координатах экрана, отличается от двух.

Вы можете найти этот вопрос полезным: UIKeyboardBoundsUserInfoKey устарел, что использовать вместо него?