Представление вращающегося модального окна в виде листа поверх другого контроллера представления, заблокированного в книIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Представление вращающегося модального окна в виде листа поверх другого контроллера представления, заблокированного в кни

Сообщение Anonymous »

У меня есть приложение, основной контроллер представления которого (назовем его VC-A) заблокирован в книжной ориентации. Я хотел бы представить модальное окно в виде листа (назовем его VC-B) поверх него, позволяющее модальному модулю свободно вращаться. Существуют некоторые дополнительные ограничения:
  • VC-A должен оставаться в книжной ориентации всегда. Никаких проблесков или анимации, связанных с альбомной ориентацией, даже при переходе к VC-B или обратно.
  • Если VC-B отображается, когда устройство находится в альбомной ориентации, оно должно присутствовать в этой ориентации. ориентация (сдвиньте с длинной стороны экрана). Его также следует отклонить в этом направлении.
  • В портретной ориентации VC-B должен отображать переход/анимацию по умолчанию, так что VC-A прижимается вниз и слегка масштабируется.
За прошедшие годы было много похожих вопросов и ответов, но большинство предложенных ответов не соответствуют всем этим требованиям, не работают с модальным представлением, или слишком хакерские. Тем не менее, это определенно должно быть возможно — я видел как минимум два приложения, реализации которых соответствуют моим требованиям. Не уверен, кошерно ли публиковать здесь существующие приложения, но при необходимости могу привести примеры.
На данный момент я попробовал следующее:
Вариант 1: Пользовательский подкласс UINavigationController
Что-то похожее на ответ здесь, где содержащий контроллер навигации возвращает другое значение для поддерживаемыхInterfaceOrientations в зависимости от самого верхнего контроллера. Это работает, но нарушает (1) и (2) — при представлении или закрытии контроллера представления всегда присутствует анимация, требующая другой ориентации, чем предыдущая.
Я также попробовал представить модальный из прозрачного вложенного/дочернего контроллера представления, но он имеет аналогичные ограничения.
Изображение

Вариант 2: несколько UIWindows (более перспективный)
Вместо представления VC-B непосредственно из VC-A (или общего родительского элемента) создайте новый прозрачный UIWindow и используйте его rootViewController для представления модального окна. Это прекрасно решает (1) и (2):
Изображение

Однако на этапе (3) происходит сбой, поскольку листPresentationController больше не использует VC-A. Вместо этого анимируется чистый rootViewController, в результате чего поверх VC-A появляется прозрачная тень:
Изображение

Эту тень/затемнение можно предотвратить, установив для крупнейшегоUndimmedDetentIdentifier значение .large:
Изображение

Однако я просто хочу применить этот эффект к VC-A, а не исключить его полностью. Конечный результат должен выглядеть так же, как и без использования отдельного UIWindow:
[img]https://i.sstatic .net/ZkKNrDmS.gif[/img]

Я могу придумать некоторые возможные обходные пути, но не совсем уверен, как действовать. Я попытался представить прозрачный контроллер представления (назовем его VC-C) из VC-A одновременно с представлением VC-B из другого UIWindow. Это создает иллюзию, что VC-B представлен из той же иерархии представлений, что и VC-A (за счет того, что VC-A имеет желаемый эффект опускания), но усложняет увольнение. Достаточно тривиально гарантировать, что оба листа будут закрыты одновременно, если увольнение() используется напрямую, но если пользователь перетаскивает вниз VC-B, кажется довольно сложно синхронизировать VC-C с этим motion.
Есть ли какой-то другой метод или API, который мне не хватает? Может быть, какая-то загадочная конфигурация UISheetPresentationController, которую я проглядел, или хитрый способ использования пользовательских переходов? Какой-то способ отразить содержимое VC-A в rootViewController другого окна? Опять же, это вполне возможно, поскольку я видел, как это происходило в дикой природе.

Подробнее здесь: https://stackoverflow.com/questions/792 ... ller-locke
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»