2015-02-17 4 views
6

IOS документация dismissViewControllerAnimated:completion: состояний:ошибка IOS 8 с уклономViewControllerAnimated: завершение: анимация?

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

Это означает, что при отклонении двух модальных контроллеров просмотра одновременно с помощью

[[[self presentingViewController] presentingViewController] dismissViewControllerAnimated:YES completion:nil];

анимации показано должна быть видом сверху модальным увольняют.

Это действительно так в iOS 7 и ранее, но в iOS 8 показанная анимация не самая лучшая точка зрения (по моему опыту, это второй вид сверху). Является ли это поведение ошибкой в ​​iOS 8, или я делаю что-то неправильно?

+1

Вы имеете в виду самый верхний вид внезапно исчезает в начале анимации? – AncAinu

+0

Я уверен, что это ошибка. Это также происходит, если вы выполняете разворот, который возвращает несколько контроллеров (если я правильно помню, в этом случае вы видите, что верхний вид исчезает, но также кратко, второй - последний контроллер). – rdelmar

+0

Был ли отчет об ошибке отправлен в Apple? Я не знаю, как это сделать или как проверить. – James

ответ

3

Как уже отмечалось выше: я вижу ту же самую проблему в контексте размотки segue. Я просто обходной пути токе, как описано здесь с помощью экрана и добавить его в качестве подвида все промежуточного viewControllers: How to dismiss a stack of modal view controllers with animation without flashing on screen any of the presented VCs between the top and bottom?

// this in during unwind in a custom UIStoryboardSegue (that is the reason why it might look wrong with what is what: srcViewController and destViewController 
    UIViewController* aPresentedViewController = destViewController.presentedViewController; 
    while (aPresentedViewController != nil) { 
     if (aPresentedViewController == srcViewController) { 
      break; 
     } 
     UIView *anotherSrcViewCopy = [srcViewController.view snapshotViewAfterScreenUpdates: NO]; 
     anotherSrcViewCopy.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; 
     [aPresentedViewController.view addSubview:anotherSrcViewCopy]; 
     // recurse through the presentedViewController hierarchy 
     aPresentedViewController = aPresentedViewController.presentedViewController; 
    } 
1

Тех же проблема и такого же решения здесь, чем @theguy. Вот моя версия в Swift без перебора всех контроллеров зрения:

guard 
    let presentedViewController = segue.destination.presentedViewController, 
    let viewToCopy    = segue.source.view.snapshotView(afterScreenUpdates: false) 
else { return } 

viewToCopy.autoresizingMask = [.flexibleWidth, .flexibleHeight] 
presentedViewController.view.addSubview(viewToCopy) 

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

  • Нет связанных вопросов^_^