ВСЕ ВЕРНУТЬСЯ НА УСТРОЙСТВО
Это предупреждение может быть реализовано для нескольких различных объектов: сборщиков, клавиатуры и т. Д.
Я обнаружил, что это связано с тем, что пользовательский интерфейс выполняет два шага для завершения перехода или другой анимации. Или для любого случая, когда пользовательский интерфейс пытается завершить одну вещь, и ему предлагается выполнить другую, прежде чем она будет завершена. (поэтому охватывает широкий спектр возможных триггеров)
Я видел предупреждение, появившееся на 4.0 и 4.2. В моем случае я работал с вращением устройства и определял, была ли клавиатура по-прежнему поднята (т.е. текстовое поле все еще было первым респондентом). Если это так, клавиатуру нужно было поддерживать между представлениями, но это представляло другие сложности с другими представлениями.
Поэтому я реализовал BOOL-трекер, чтобы отслеживать, если keybaordIsPresent, и если да, то я был {textfield resignFirstResponder]; при обнаружении изменения ориентации и сбросе текстового поля на становлениеFristResponder после перехода, который был обернут в блок анимации. Мой BOOL-трекер работал лучше, я все еще использую NSNotifications для клавиатуры, но во время вращений были перекрытия уведомлений, потому что клавиатура отклонялась без запроса такого. BOOL устанавливается на NO при загрузке и когда [текстовое поле resignFirstResponder]; реализовано. * not when "- (void) keyboardWillhide запускается NSNotifications, что дает мне оба рабочих триггера, которые никогда не конфликтуют. BOOL устанавливается в YES, только когда пользователь касается текстового поля, которое автоматически запускает становлениеFirstResponder.
Я удалил предупреждение, взяв [textfild resignFirstResponder]; из
-(void)willAnimateFirstHalfOfRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
//if (keyboardIsPresent == YES) {[self.entryTextField resignFirstResponder];}
}
и поместив его обратно вверху кода для:
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
if (keyboardIsPresent == YES) {
[self.entryTextField resignFirstResponder];
}
//Determine Which Orientation is Present:
if((fromInterfaceOrientation == UIInterfaceOrientationPortrait) || (fromInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)){
//LANDSCAPE VIEW:
[self configureLandscapeView];
}else {
//PORTRAIT VIEW:
[self configurePortraitView];
}
}
** Даже если у меня не было кода внутри - (void) willAnimatFirstHalfOfRotationToInterface:, предупреждение все еще появлялось. Я думаю, что предупреждение все еще появлялось, потому что компилятор все еще должен пытаться выполнить метод, в то время как он пытается выполнить первую анимацию и поэтому получает двойной вызов анимации или перекрытие ресурсов. Он не знает, что у метода нет исполняемого кода до тех пор, пока он не пройдет через него. И к тому времени он уже выделил ресурс для подготовки к обработке возможных действий в методе.
** Чтобы устранить предупреждение, мне пришлось удалить или обнулить код для willAnimateFirstHalfOfRotation, так что компилятору даже не нужно проверять, есть ли возможная вторая анимация или действие, которое может потребоваться выполнить одновременно .
/*-(void)willAnimateFirstHalfOfRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
//if (keyboardIsPresent == YES) {[self.entryTextField resignFirstResponder];}}*/
После того, как переход завершен, в исходном анимационном блоке я проверяю, было ли «keyboardIsPresent» перед поворотом «ДА», и если да, я оставляю Первого ответчика еще раз. Я использую setAnimationDuration:0.3
, который получается довольно чистый и не нервный.