Czy ktoś może mi powiedzieć „właściwe” lub „najlepsze” podejście do pracy z orientacją pionową i poziomą interfejsu w iOS 8? Wygląda na to, że wszystkie funkcje, których chcę używać do tego celu, są przestarzałe w iOS 8, a moje badania nie wykazały jasnej, eleganckiej alternatywy. Czy naprawdę mam spojrzeć na szerokość i wysokość, aby samodzielnie określić, czy jesteśmy w trybie pionowym czy poziomym?
Na przykład w moim kontrolerze widoku, jak zaimplementować następujący pseudokod?
if we are rotating from portrait to landscape then
do portrait things
else if we are rotating from landscape to portrait then
do landscape things
UIViewController
. Zobacz sekcję zatytułowaną „ObsługaOdpowiedzi:
Apple zaleca używanie klas rozmiaru jako przybliżonej miary dostępnej przestrzeni na ekranie, aby interfejs użytkownika mógł znacząco zmienić jego układ i wygląd. Weź pod uwagę, że iPad w orientacji pionowej ma te same klasy rozmiarów, co w orientacji poziomej (standardowa szerokość, standardowa wysokość). Oznacza to, że Twój interfejs użytkownika powinien być mniej więcej podobny między dwiema orientacjami.
Jednak zmiana z pionowej na poziomą w iPadzie jest na tyle znacząca, że może być konieczne wprowadzenie mniejszych zmian w interfejsie użytkownika, nawet jeśli klasy rozmiarów nie uległy zmianie. Ponieważ metody związane z orientacją interfejsu
UIViewController
zostały wycofane, firma Apple zaleca teraz zaimplementowanie następującej nowej metodyUIViewController
jako zamiennika:Wspaniały! Teraz otrzymujesz wywołania zwrotne tuż przed rozpoczęciem rotacji i po jej zakończeniu. Ale co z faktyczną wiedzą, czy obrót ma charakter pionowy, czy poziomy?
Apple zaleca myślenie o obracaniu jako po prostu zmianie rozmiaru widoku rodzica. Innymi słowy, podczas obracania iPada z orientacji pionowej do poziomej, możesz myśleć o nim jako o widoku na poziomie głównym, po prostu zmieniając go
bounds.size
z{768, 1024}
na{1024, 768}
. Wiedząc o tym, powinieneś użyć metodysize
przekazanej doviewWillTransitionToSize:withTransitionCoordinator:
powyższej metody, aby dowiedzieć się, czy obracasz do pionu, czy do krajobrazu.Jeśli chcesz jeszcze bardziej bezproblemowo migrować stary kod do nowego sposobu wykonywania zadań w iOS 8, rozważ skorzystanie z tej prostej kategorii w UIView, której można użyć do określenia, czy widok jest „pionowy” czy „poziomy” na podstawie rozmiar.
Przypomnę:
viewWillTransitionToSize:withTransitionCoordinator:
wywołania zwrotnego w UIViewController.statusBarOrientation
- która jest w zasadzie właściwością na poziomie urządzenia - do określania, czy układ widoku ma być „pionowy” czy „poziomy”. Orientacja paska stanu powinna być używana tylko przez kod zajmujący się rzeczami,UIWindow
które faktycznie znajdują się na samym poziomie głównym aplikacji.źródło
UIViewControllerTransitionCoordinator
viewdidlayoutsubviews
? Myślę, żeviewdidlayoutsubviews
jest używany do rejestrowania zmian związanych z obrotem. Czy możesz to rozwinąć?W oparciu o bardzo szczegółową (i akceptowaną) odpowiedź Smileyborga, oto adaptacja wykorzystująca Swift 3:
A w
UICollectionViewDelegateFlowLayout
realizacjiźródło
Po prostu korzystam z Centrum powiadomień:
Dodaj zmienną orientacji (wyjaśnię na końcu)
Dodaj powiadomienie, gdy pojawi się widok
Usuń powiadomienie, gdy widok zniknie
Pobiera aktualną orientację po wyzwoleniu powiadomienia
Sprawdza orientację (pionową / poziomą) i obsługuje zdarzenia
Powodem dodania zmiennej orientacji jest to, że podczas testowania na urządzeniu fizycznym powiadomienie o orientacji jest wywoływane przy każdym drobnym ruchu w urządzeniu, a nie tylko wtedy, gdy się obraca. Dodanie instrukcji var i if wywołuje kod tylko wtedy, gdy został przełączony na przeciwną orientację.
źródło
super
odviewDidAppear
iviewWillDisappear
powinna nazywaćZ perspektywy interfejsu użytkownika uważam, że używanie klas rozmiaru jest zalecanym przez Apple podejściem do obsługi interfejsów w różnych orientacjach, rozmiarach i skalach.
Zobacz sekcję: Cechy opisujące klasę rozmiaru i skalę interfejsu tutaj: https://developer.apple.com/library/ios/releasenotes/General/WhatsNewIniOS/Articles/iOS8.html
Ten też jest dobrym artykułem: https://carpeaqua.com/thinking-in-terms-of-ios-8-size-classes/
EDYTUJ Zaktualizowany link: https://carpeaqua.com/2014/06/14/thinking-in-terms-of-ios-8-size-classes/ (Źródło: Koen)
źródło