beFirstResponder замедляет работу приложения при отображении вида

Это своего рода продолжение этой проблемы: becomeFirstResponder замедляет работу приложения

У меня та же проблема, что и у этого плаката, т. е. вызов beFirstResponder, похоже, замедляет работу моего приложения (оно зависает, может быть, на 1-2 секунды). Однако, хотя они вызывали его в сочетании с отображением предупреждения, я просто пытаюсь отобразить скрытое представление и сделать так, чтобы оно отображалось с определенным полем в качестве первого ответчика. Что-то типа:

[self.dialogView setHidden:NO];
[self.dialogText becomeFirstResponder];

DialogView имеет иерархию, которая содержит dialogText (UITextField, который я пытаюсь установить в качестве первого ответчика) и некоторые другие элементы.

Эта медлительность проявляется только при первом выполнении этого кода, то есть при первой попытке открыть это диалоговое окно. При последующих попытках нет очевидной медлительности (я предполагаю, что это связано с тем, что в этот момент dialogText уже является первым ответчиком - я нигде не использовал resignFirstResponder?).

Изменить: вот дополнительный код для контекста, но не уверен, что он действительно прольет больше света. Примечание. Теперь я анимирую отображение этого диалогового окна, однако поведение не отличается. С тех пор я также переместил вызов beFirstResponder в блок завершения (не отраженный здесь в коде), чтобы, по крайней мере, появление диалогового окна не задерживалось, однако между появлением диалогового окна и появлением клавиатуры все еще есть задержка.

- (IBAction)showEditDialog:(id)sender
{    
    [UIView animateWithDuration:0.3f animations:^() {
        self.maskView.alpha = 0.8;
        self.editDialogView.alpha = 1.0;
    } completion:^(BOOL finished) {
        if (finished) {
        }
    }];

   [self.editDialogText becomeFirstResponder];
}

person G.S.    schedule 13.09.2012    source источник
comment
Я добавил немного больше контекста выше, хотя не уверен, сколько это добавит. Дайте мне знать, если есть что-то еще, что вы хотели бы увидеть   -  person G.S.    schedule 12.10.2012
comment
Основываясь на вашем коде, я могу сказать, что после завершения вашей анимации он покажет клавиатуру, прокомментирует ваш код анимации, а затем попытается. И дайте мне знать, все еще занимает много времени для клавиатуры?   -  person Mobile App Dev    schedule 13.10.2012
comment
Попробуйте также минимизировать время анимации и посмотрите, будет ли это иметь значение или нет.   -  person Mobile App Dev    schedule 13.10.2012
comment
Как я уже сказал, до того, как я оживил внешний вид, возникала та же проблема. Анимация тут ни при чем.   -  person G.S.    schedule 15.10.2012


Ответы (1)


во-первых, вы переключаете вид? (например, вид1 (скрыть) -> вид2 (показать))

Если у вас есть диалоговый текст (который, я думаю, является текстовым полем?) В другом представлении, я предлагаю вам сделать:

[self.view bringSubviewToFront:view2];

первый

Трудно догадаться, что замедляет его, не глядя на то, как распределяются ваши представления и где сидит ваш textView или textField.

person phil88530    schedule 17.10.2012
comment
Иерархия представлений такова: представление->editDialogView(представление)->editDialogText(texfield). Так что переключения вида как такового нет, основной вид виден всегда, мы просто скрываем/отображаем editDialogView поверх него. Я только что дал [self.view BringSubviewToFront:self.editDialogView] шанс, и похоже, что это может помочь, я проведу еще немного тестов, чтобы подтвердить и сообщить о результатах. - person G.S.; 18.10.2012
comment
кк. дайте мне знать, если это проблема. И, кстати, мне нравится имя Г. Мур, оно напоминает мне Гэри Мура. ржу не могу - person phil88530; 18.10.2012
comment
Так что я немного поторопился, думая, что BringSubviewToFront это исправит. На самом деле, похоже, это не имеет никакого эффекта (я думаю, что привык к более длительной задержке, которую я имел, помещая в блок завершения анимации отображения становлениеFirstResponder). Любые другие идеи? - person G.S.; 18.10.2012
comment
Привет, phil88530, есть еще идеи? - person G.S.; 23.10.2012
comment
Эй, извините, не заходил несколько дней. Я понял, что у вас есть 0,3-секундная анимация для альфы (прозрачной), интересно, действительно ли это вызывает это? Лично я бы использовал для этого [NSTimer ScheduleTimerWithTimeInterval:.....]? если вы хотите попробовать? И просто для интереса, не могли бы вы сказать мне, какой iphone вы используете? (какой симулятор или iPhone, какую модель вы ставили и какая версия ios?) - person phil88530; 24.10.2012
comment
потому что это такое низкое изменение альфы (от 0,8 до 1,0 крошечное), и вы на самом деле потратили 0,3 секунды, чтобы сделать это, по логике вещей, это должно быть хорошо, но мне интересно, действительно ли это приводит к тому, что ваше зрение некомфортно. если это не так, вы должны показать мне больше кодов, чтобы понять всю логику (иногда замедление происходит откуда-то еще, но срабатывает только тогда, когда происходит это действие) - person phil88530; 24.10.2012