Можно ли использовать iOS 7 UiviewController переходы (интегрирующие специально) с контроллерами просмотра детей?
-
20-12-2019 - |
Вопрос
Существует много учебных пособий вокруг использования новых API интерфейса IOS 7 UIViewController и отличного нового интерактивного перехода API. Тем не менее, ни один из них, похоже, не рекомендует добавлять и удалять контроллеры дочерних контроллеров ребенка, несмотря на то, что в видео WWDC 2013 на пользовательском UiviewController переходит на переходы Apple Contripee, показывает, что я бы представлял, чтобы контроллер представления ребенка, представленным с пользовательским переходом:
(Я предполагаю, что это как контроллер просмотра отображается поверх другого, казалось бы, я не думаю, что вы можете перейти к новому UiviewController, сохраняя их, сохраняя позади него ...)
Можно ли добиться такой вещи с контроллерами просмотра детей?
В моей конкретной ситуации я добавляю галерею изображений UIPageViewController
в качестве контроллера по просмотру детей, но вы все равно можете увидеть контроллер представления, к которому он был добавлен, если изображение UIPageViewController
не занимает полный экран. Я также добавил возможность скольжения изображений выключить экран (похоже на многозадачаю в iOS 7), и я бы понравилось, чтобы это был интерактивный контроллер просмотра POP.
Есть ли уравнения для такой вещи? Это даже возможно? Будет ли это лучше сделать с presentViewController
как-то, что позволило бы мне просмотреть контроллер просмотра под?
Решение
Если вы снова смотрите видео, вы заметите в 12:15, он ссылается на поддержанный стиль презентации GeneracodicCode. Этот стиль презентации означает, что представление «от» просмотра контроллера не удаляется из иерархии просмотра, что позволяет вам создавать свои собственные формы. Так что в вашем случае вы сделаете следующее:
//insert code where you want the presentation to begin
UIPageViewController *pageVC = [[UIPageViewController alloc] init];
pageVC.modalPresentationStyle = UIModalPresentationCustom;
id<UIViewControllerTransitioningDelegate> transitionDelegate = [self transitionDelegate];
[self presentViewController:pageVC animated:YES completion:nil];
.
Ваш объект перехода в анимации будет нести ответственность за обеспечение того, чтобы ваша страница просмотра контроллеров не является полным экраном. Просто остерегайтесь последствий управления двумя комплексными контроллерами представления на экране одновременно. Я бы порекомендовал, чтобы увидеть снимком вашего первого представления контроллеров представления, а затем сделать его на фоне представления контроллеров второго представления. Контроллер просмотра страницы тогда будет ребенком второго контроллера.
Вы можете найти этот учебник полезным - http://www.teehanlax.com/ Блог / Custom-UiviewController-переходы /
Лучше еще, кто-то пошел на репликацию образца сеанса 218 на Github - https://github.com/soleares / Solpresentingfun
Счастливый кодирование
Другие советы
Похоже, вы хотите сделать пользовательский переход с контейнером UIViewController. Это хитровое предложение, чем типичные переходы, потому что вам нужно обеспечить объект, который реализует GeneracodicCode самостоятельно.
Несмотря на все необходимые методы, этот протокол не так сложно реализовать. Большинство методов являются очевидными. Поскольку вы хотите интерактивный переход, вы столкнетесь с некоторыми препятствиями, которые я еще не сталкивался. Вот несколько советов, которые я недавно обнаружил при внедрении этого протокола:
-
Не бойся определить ваши собственные ключи для:
UIViewControllerContextTransitioning
. Я обнаружил, что мне нужно ссылку на контроллер родительского представления в моем объекте аниматора. Самое чистое решение определяло другой ключ для передачи в этот метод. Это работает очень хорошо, если объект, который реализует этот протокол, также является контроллером родительского представления. -
Отправьте свой аниматор, вызывая
viewControllerForKey:
вместо того, чтобы создать свой аниматор. Еще раз, это было похоже на более чистый подход, поскольку он работает в пределах протоколов. Это метод, который в противном случае был бы назван как часть генеракодицетагкода. -
Используйте
animationControllerForPresentedController:presentingController:sourceController
. Поскольку вы специально говорите о контроллерах по просмотру детей, вы не делаете модальную презентацию. -
Добавьте вызовы сопровождения контроллера просмотра, например, Генеракодицетагкод в вашем аниматоре. Здесь вы будете добавлять свой новый контроллер представления на иерархию контроллера просмотра.