2013-10-11 2 views
0

В первый раз, когда клавиатура вызывалась в приложении, всегда есть задержка (2-3 секунды). Есть ли способ или трюк, чтобы улучшить этот опыт? Я пытался использовать NSTreading, но он сбой при ошибке «выполняется только в основном потоке», если я использую [textfield getFirstResponder]; Есть идеи?Возможно ли увеличить производительность первого запуска клавиатуры в iOS

+0

Использовать профилировщик времени процессора инструмента, чтобы увидеть, что приложение делает в первый раз, когда вы поднимаете клавиатуру. Возможно, это не клавиатура. – BergQuester

+0

@BergQuester хорошо, я просто установил текстовое поле видимым и установил первый ответчик. Это все. И если я запускаю то же самое во второй и третий раз, он работает очень хорошо. – codingrhythm

ответ

1

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

В вашем случае попытка предварительной загрузки клавиатуры в фоновом режиме не будет работать. Имейте в виду, что клавиатура не создана только в вашем приложении - она ​​разделяется по всей системе. Это означает, что если система решит, что ей необходимо очистить память, скорее всего, она будет «непривязать» клавиатуру, если она не будет видна.

Если это происходит в симуляторе, это, скорее всего, потому, что вы покидаете Симулятор после каждого тестового прогона. В результате клавиатура должна загружаться каждый раз, когда вы запускаете тест. Однако, если это происходит на устройстве, то, скорее всего, ваше устройство часто работает с низким объемом памяти.

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

+0

Да, я могу использовать этот трюк. Однако у меня есть анимация, отображаемая для отображения текстового поля. Если я запускаю клавиатуру перед кодом анимации, поток, кажется, заблокирован, и на анимации будет задержка, что тоже не очень хорошо. Как я уже сказал, задержка происходит только в первый раз, когда показывает клавиатура. Я понимаю, что этого нельзя избежать, если система спроектирована таким образом. Я просто хочу знать, есть ли какие-то трюки, которые я могу использовать. Невидимое текстовое поле является хорошим, но не работает в этом случае. – codingrhythm

+0

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

-2

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

Смежные вопросы