Проблемы Анимации клавиатуры При Вызове becomeFirstResponder в Модальном Контроллере Представления

У меня были некоторые проблемы с вызовом -becomeFirstResponder на a UITextField содержавший с целью контроллер, который представлен модально. Я называю этот метод в модальном контроллере представления -viewDidLoad метод так, чтобы клавиатура была сразу отображена. То, что я ожидал, и для клавиатуры и для модального контроллера представления для анимации от нижней части экрана одновременно. Однако то, что я наблюдаю, следующее:

  1. Существует ~0.2 вторых задержки UI между нажатием кнопки, которая звонит -presentModalViewController:animated: метод на родительском контроллере представления и когда дочерний контроллер представления начинает анимировать модально.
  2. Клавиатуре сразу не дарят абсолютно никакую анимацию, как только модальная анимация контроллера представления начинается.
  3. После того как модальная анимация контроллера представления завершена, все остальное, кажется, работает гладко.
  4. Отклонение модального контроллера представления приводит к нему гладко анимируемый от экрана (наряду с клавиатурой, по совпадению).
  5. Нажатие кнопки, которая представляет модальный контроллер представления любое время после первого раза результаты в том же шаблоне за исключением того, что существует № ~0.2 вторая задержка UI.

Это - как будто анимация клавиатуры и модальная анимация контроллера представления оба конкурируют за некоторый Базовый ресурс Анимации низшего уровня одновременно, но я не вижу, почему это должно происходить. То, что далее, кажется, подтверждает эту догадку, - то, если я не спрашиваю UITextField для становления первым респондентом (т.е. если я не прошу, чтобы клавиатура представила себя) затем нет абсолютно никакой задержки UI, и модальный контроллер представления анимирует немедленно.

Интересно, если я делаю что-то как [self.textField performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0.0001]; затем анимация клавиатуры происходит почти в то же время, что и модальная анимация контроллера представления - чрезвычайно трудно сказать, что они оба не анимируются в то же самое время при работе iPhone Simulator. Однако при работе существующего устройства, легко примечательно, что клавиатура не появляется, пока модальный контроллер представления не представлен. Значительно, тем не менее, больше нет задержки UI.

Кто-либо испытал что-либо подобное этому?

8
задан CIFilter 26 April 2010 в 19:47
поделиться

3 ответа

Я считаю, что у вас проблемы из-за того, что вы эффективно складываете анимации. Представление клавиатуры содержится в модальном представлении. Представление клавиатуры пытается анимировать свой переходящий слайд в контексте представления, которое само анимирует переходный слайд. Анимация клавиатуры пытается поразить движущуюся цель.

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

Итак, представление с клавиатуры анимируется, скользя, но поскольку супервизор еще не виден, вы ничего не видите. Когда супервизор действительно вставляется, клавиатура уже присутствует, потому что его анимация была завершена до того, как супервизор начал свою анимацию.

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

Я думаю, что предложение Cirrostratus, приведенное выше, является хорошим. Используйте изображение клавиатуры, которое будет выдвигаться вместе с модальным представлением, а затем немедленно замените его реальной клавиатурой.

4
ответ дан 5 December 2019 в 23:14
поделиться

Вы говорите, что наблюдаете отставание в симуляторе, но не на устройстве? Если это так, вы можете столкнуться с задержкой из-за того, что вашему компьютеру не нужно загружать все в память. При первой загрузке симулятора он не просто запускает код изначально, он, вероятно, загружает всевозможные библиотеки времени выполнения и отладки. После загрузки в память система, вероятно, работает довольно быстро. Если вы испытываете задержку в симуляторе, возможно, вам может помочь дополнительная оперативная память на вашем компьютере разработчика. Если вашей машине несколько лет, вы можете подумать о покупке чего-то нового.

0
ответ дан 5 December 2019 в 23:14
поделиться

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

0
ответ дан 5 December 2019 в 23:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: