3

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

Есть ли способ сделать это в более ранних версиях, таких как iOS 4.x?

Я использовал presentModalViewController, чтобы представить контроллер, и я заметил, что вы не можете вызвать метод увольнения, если анимация не завершилась.

Итак, как я могу определить, когда анимация завершена, поэтому я могу ее отпустить?

+1

Из любопытства, что бы стоило представить, а затем немедленно отклонить контроллер модального вида? – CodaFi

+0

Ох ... Я представляю экран «Подождите» и сделаю сетевой запрос, который может занять около минуты. Если с подключением возникает ошибка, иногда ее обнаруживается до завершения анимации. Если я его отпустил, он просто проигнорирует команду. – blissweb

+0

Если вы хотите показать им, что что-то делаете, когда выполняется длительный процесс, например, извлекая некоторые данные из Интернета, попробуйте использовать ['SVprogressHUD'] (https://github.com/samvermette/SVProgressHUD) , Он отключит интерфейс и отобразит 'UIActivityIndicator'. –

ответ

1

Я просто попробовал уволить модно представленный VC, на viewDidLoad, viewWillAppear и viewDidAppear. Никаких кубиков в первых двух, но увольнение работает в viewDidAppear. (Вид имеет смысл, что это вызвало бы после анимации).

И, вы, вероятно, знаете это уже, но в случае, если вы этого не сделаете: вам не нужно отклонять представленный мода VC от ВК, который его представил. Ваш «wait for the network» VC может проверить состояние подключения в viewDidAppear и уволить себя, если соединение завершено.

+0

Awesome ... спасибо за это. Надеюсь, это поможет намного больше людей. Я постараюсь позже обновить сообщение своим кодированным решением. – blissweb

0

Нет точного способа сделать это - лучше всего вы можете надеяться, используя viewDidDisappear: от контроллера представления представления. Обязательно используйте переменную экземпляра boolean, чтобы определить, исчезаете ли вы, потому что отображается контроллер модального представления или какая-то другая причина.

Честно говоря, если вы создаете новое программное обеспечение, я строго рекомендую вам настроить iOS 5 и выше. Подавляющее большинство людей модернизировано, а остальные - через несколько месяцев; просто нет оснований для поддержки iOS 4 для новых проектов.

+0

Спасибо. Я попробую. Думаю, я мог бы отправить сообщение обратно из модального файла после его загрузки. Любая идея, которая из блоков «viewWillAppear» и «viewDidLoad» блокирует или что-то еще, что запускает только * после завершения анимации? – blissweb

+0

Это действительно хороший вопрос - документация Apple по [Жизненный цикл контроллера] (https://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ViewLoadingandUnloading/ViewLoadingandUnloading.html#//apple_ref/doc/uid/TP40007457-CH10-SW1). Я бы предложил прочитать таблицу 4-1, чтобы получить представление о том, какую логику следует использовать в методах. Если вы используете xib вместо раскадровки, это прекрасно, это руководство по-прежнему применяется. –

0

Это просто вещь, которая говорит «подождите, пока я делаю сетевой запрос»? Возможно, вы могли бы использовать представление для этого (полный размер, прикрепленный к keyWindow), а не весь контроллер представления. Vc, запускающий сетевой запрос, может представить представление и удалить его с любой анимацией, которая вам нравится. У меня есть класс, который делает это. Дайте мне знать, если вы хотите попробовать, и я вложу его.

+0

Я должен упомянуть, это код OS5, поэтому вам придется добавить в ручной сбор мусора. – danh

+0

Да, я согласен, что это обходное решение, просто немного больше работы и кода, и мне просто интересно, есть ли ответ на конкретный вопрос, для моих и других. Благодарю. – blissweb