UIPageViewController за представяне подобно на изскачащ прозорец в рамките на основния изглед

В моето приложение искам да създам потребителска история (ръководство за въвеждане), която ще бъде купчина от 3-4 карти с възможност за плъзгане. Потребителят може да плъзне през и след последното плъзгане, приложението стартира. Потребителят може също да пропусне, когато пожелае.

По-долу е подобно на това, което бих искал да имам.

Очакван резултат:

въведете описание на изображението тук

Имате основния изглед, който се появява малко отстрани.

Започнах да използвам UIPageViewController за управление на такъв стек от карти, което направих успешно. (Имам 3 отделни изгледа - които се подават в моя персонализиран UIPageViewController). Добавих също тези малки точки за плъзгане (това, което виждате обикновено в долната част на такъв стек за включване). Въпреки това, тъй като в крайна сметка исках моя основен изглед зад този изглед на страница, започнах да използвам изглед на контейнер, както е предложено в този урок. Изтеглих контейнерен изглед в моя основен изглед, направих неговия клас на контролера мой персонализиран клас PageViewController.

Въпреки че успях да имитирам това, което исках, както виждате по-долу, повечето от персонализациите, които направих в моя персонализиран UIPageViewController, не са налични за използване в контролера на този изглед на контейнер (който сега е моят Custom PageViewController).

Действителен резултат:

въведете описание на изображението тук

Персонализациите, които направих в моя персонализиран UIPageViewController, бяха: 1. Точки за плъзгане (или навигация) в долната част. 2. Цвят на тези точки. 3. Цвят на фона 4. Планирам да направя повече, като например промяна на границите му на RoundedRect и т.н.

При изследване в инспектора на атрибути, ето кои атрибути са налични за промяна във всеки UIPageViewController:

Атрибути за UIPageViewController, като цяло

въведете описание на изображението тук

И по-долу са атрибутите, които се появяват за контролера на контейнера, който сега всъщност трябва да бъде подклас на UIPageViewController, нали? Както виждате, изобщо няма раздел за „Контролер за изглед на страница“.

Атрибути за моя персонализиран UIPageViewController (VC на контейнера не е подклас на това)

въведете описание на изображението тук

И така, търсех две неща:

Въпроси:

  1. Това ли е най-добрият начин да постигна това, което искам? (Също така мислех да използвам UIAlert и т.н., за да постигна това, но се отказах, тъй като исках повече контрол).

  2. Какъв е проблемът с контролера на Container, че при промяната му на UIPageViewController, всички настройки стават по подразбиране.

Моят приоритет е да получа по-добра представа за първия си въпрос. Указателите със сигурност биха били полезни. Много благодаря за вашите мисли.


person Manganese    schedule 23.12.2017    source източник


Отговори (2)


Възможно е да постигнете целта си с помощта на контролер за изглед на страница – това ще включва създаване на контролер за изглед за картата с урок с ясен, полупрозрачен (не непрозрачен) фон.

Искате контролерът за изглед на страницата да запълни целия екран, така че ефектът на страниране да не бъде изрязан до границите на картата с урок. Странирането заедно със заключването на посоката на превъртане ще ви позволи ефективно да отхвърлите картите си, докато няма повече за показване.

Така че вместо да използвате контейнерен изглед, представете своя контролер за изглед на страница с премахнат гръб и представянето, зададено на „Над текущия контекст“ – това оставя контролера за изглед отзад видим. Контролерът за изглед на страница ще представи масив от контролери за изглед на карти за обучение, които конфигурирате.

Контролерът за изглед на карта с урок също няма да има фон, но в центъра на изгледа ще има плаваща карта, съдържаща вашия текст и бутон за отхвърляне. Свържете изходите от разкадровката към вашия персонализиран контролер за изглед на карти за обучение, така че да можете да конфигурирате множество екземпляри с различен текст.

След това се уверете, че давате на контролера за изглед идентификатор на сценария, така че да може да бъде създаден при конфигуриране на източника на данни на контролера за изглед на страница. Създайте своя масив от контролери за преглед на карти за обучение и настройте източника на данни, за да ги представите.

Не бих казал, че това е най-добрият начин да се направи, тъй като има много пакети с „карти с възможност за плъзгане“, които дават тази функционалност и повече, но за доброто на „Направи си сам“ това е осъществим път.

person Callam    schedule 23.12.2017
comment
Благодаря Калъм. Това всъщност работи и заедно с промяната на атрибутите на времето за изпълнение, аз всъщност мога да имитирам това, което очаквах на първо място. Проблемът е: Моят основен VC винаги трябва да е във фонов режим. И PageView заедно с 2/3 изгледа трябва да са отгоре. Промених непрозрачността на моите три изгледа, лежащи в основата на PageViewController. Изглежда добре. Все още не мога да видя основния си VC, защото тъй като искам тези карти да се показват, съм задал PageViewController като Intial View Controller. Как мога да задам основния VC като първоначален ViewController и да добавя изгледите на моя PageViewController в горната му част? - person Manganese; 23.12.2017
comment
Ако трябваше да направите вашия основен VC първоначален контролер, в viewDidAppear, представете контролера за изглед на страница модално в текущия контекст. Това може да се направи чрез конструктора на интерфейс segue или програмно чрез задаване на модалния тип представяне на контролера, който представяте на .overCurrentContext. - person Callam; 23.12.2017
comment
Ще опитам това и ще видя дали работи. Въпреки това получих по-голямата част от отговора, който ми трябва от вашия отговор. След като опитам, ще приема това като отговор. Плюс това, разбираемо пакетите с карти с възможност за плъзгане са много и могат да се използват. - person Manganese; 23.12.2017
comment
В отговора по-долу, оцветеният в жълто един е моят основен VC. Благодаря за вашата помощ. - person Manganese; 24.12.2017

Кръстосаното съединение е просто вътрешно съединение с условие за свързване винаги вярно. За естествения Join това е нещо различно. Това е просто друг синтаксис, но може да бъде ляво външен, десен външен или вътрешен: docs.oracle.com/javadb/10.8.3.0/ref/rrefsqljnaturaljoin.html
person Manganese    schedule 24.12.2017