2014-11-05 8 views
9

Wykonuję aplikację odtwarzacza multimediów. Mam kontrolery UITableViewController, które są osadzone w kontrolerze nawigacyjnym. Chciałbym jakoś zrobić widok, który nakładałby potencjalnie wiele (2?) Tych kontrolerów tableview (jeden pokazujący listy odtwarzania użytkownika, a następny pokazywałby ścieżki na liście odtwarzania), ale tylko na dole, jak teraz gra bar w (na przykład) iOS Spotify (jak w lewym dolnym boku tejJak utworzyć teraz pasek odtwarzania, jak w aplikacjach odtwarzacza multimedialnego na iOS z XCode?

enter image description here

lub jak w tym

enter image description here

próbowałem przeciągnąć pojemniku wgląd mojego Nawigacji kontroler (w którym osadzona jest moja TableViewCell), ale nie pozwala ja to zostaw.

Wygląda na to, że mogę przeciągnąć widok kontenera do mojego widoku TableView, ale w jaki sposób pozostanie tam podczas nawigacji między widokami tabeli?

Próbujesz podążać za sugestią @Rintaro, ale jestem trochę nowy w XCode. Jak to zrobiłeś? Zrobiłem więc aplikację do widoku pojedynczego, dodałem widok kontenera do pierwszego VC, to niestety rysuję go gdzieś indziej w scenorysie, ale nie mogę wymyślić, jak powiedzieć temu widokowi, że jest to kontroler nawigacyjny. także, gdy tylko dodaję drugi pojemnik do pierwszego VC i spróbuję go powiększyć, pierwszy pojemnik znika! Jest on nadal wymieniony w hierarchii po lewej i nadal ma strzałkę wskazującą na niego, ale kontroler widoku, który został dodany i był wskazywany jest również niewidoczny ?!

enter image description here

enter image description here

UPDATE: To działa bardzo dobrze, ale ma problem ze zmiany orientacji. jak mogę to zrobić w obu orientacjach? (Postawiłem hipotezę, że obecnie ustawia "widok nowowy" na ekranie po zmianie orientacji).

Odpowiedz

19

Zasadniczo, widok hierarchia tak jest skonstruowany tak:

screenshot

za pomocą dwóch „pojemnik View "w kontrolerze początkowego podglądu, jeden dla kontrolera nawigacyjnego, jeden dla kontrolera widoku" Teraz odtwarzany pasek ".

DODANO:

"Main Container View Controller" byłoby własną UIViewController podklasy. Będzie musiał pokazać/ukryć "Pasek Teraz gra".


Obejście dziwnych zachowań programisty interfejsu.

Można ustawić ograniczenia automatycznego układu, takie jak następujące. Może warto wybrać widok z lewego menu.

Należy pamiętać, że należy odznaczać odznaczenieConstrain to margins pole wyboru.

Pojemnik View dla kontrolera nawigacji:

screenshot

Pojemnik Zobacz na pasek Teraz odtwarzane Kontroler:

screenshot

A potem, Update Frames z menu:

screenshot

+0

dzięki za twój wpis, zredagowałem moje pytanie z moim potwierdzeniem twojej odpowiedzi, wydaje się obiecujące z twojego zrzutu ekranu! Jaki rodzaj kontroler widoku to "Główny kontroler widoku kontenera"? Nie widzę niczego w bibliotece obiektów, która ma tę ikonę? – Michael

+0

Główny kontroler to prosty kontroler UIView, który zawiera 2 UIContainerView. Dobry pomysł. –

+1

@Michael Dodano do odpowiedzi. – rintaro

0

Oczywiście musisz utworzyć niestandardową klasę UIView, w której pokażesz to menu. A kiedy będziesz go tworzyć, dodawać go do widzenia tak jak tutaj:

float y = ROOTVC.view.frame.size.height - 49; 
[self setFrame:CGRectMake(0, y, 320, 49)]; 
[ROOTVC.view addSubview:self]; 
[ROOTVC.view bringSubviewToFront:self]; 
+0

Próbowałem tego, ale wygląda na to, że się nie pokazuje. Do jakiego VC powinno ono zostać dodane jako wydział? – Michael

+0

@Michael dodaj go do swojego root VC - UINavigationController. Spróbuj tego snippet # #define ROOTVC [[[[UIApplication sharedApplication] delegate] window] rootViewController] ' –

0

ja po prostu dodać nowPlayingView do appDelegate.window i dostosować albo:

  • window.rootController.view ramki w celu uniknięcia pokrywania się nowPlayingView.

  • Jeśli window.rootController.view jest UIScrollView dostosować jej contentInset.bottom aby uniknąć zachodzenia na nowPlayingView. W tym rozwiązaniu można również zastosować przezroczystość/przezroczystość.

  • Dodaj dummy pasek narzędzi do kontrolera, który zostanie objęty przez nowPlayingView.

Jeśli window.rootController jest UINavigationController, potem trzeba prawdopodobnie wykonaj powyżej Fore Każdy kontroler ty pchać. Model nowPlayingView pozostanie niezmieniony na wierzchu.

2

Jeśli ręcznie wstawiasz przyciski ze współrzędnymi bezwzględnymi, pamiętaj, aby zaktualizować ich współrzędne po zmianie obrotu.

+2

To wydaje się być raczej komentarzem, a nie rzeczywistą odpowiedzią. – Rizier123

+0

Ustawiałem pozycję widoku nowoplayingowego na podstawie rozmiaru ekranu, ale kiedy się obrócisz, powinienem wtedy użyć transponowanych wymiarów (np. Szerokość ekranu, by ustawić pozycję y). Dzięki! – Michael