2013-10-15 17 views
10

W przypadku aplikacji obsługującej tylko iOS7, mam UITableView (chociaż byłoby to akademickie, aby zmienić go na UICollectionView, jeśli to pomoże), gdzie komórki wyglądają tak:Animowanie subviews w interaktywnym przejściu z UITableView do UIView

+----------------------------------+=======+ 
| Label1       | sub- | 
| Label2  Label3    | view | 
+----------------------------------+=======+ 

chcę przejść do drugiego widoku, gdzie subview jest pomniejszona być większe i zmieniać pozycje etykiet, coś bardziej jak to:

  +----------+ 
      |   | 
      | subview | 
      |   | 
      +----------+ 
      Label1 
      Label2 
      Label3 

ta jest podobna do iOS7 Aplikacja kalendarza, w której widoki są przenoszone i animowane części na droga. Wiem, że muszę zaimplementować UIViewControllerAnimatedTransitioning, ale mam konceptualnie problemy z tym, jak coś takiego będzie działać. Czy ukrywam podkomórki komórki, zastępuję je widokami nowego widoku, ale w tym samym miejscu, a następnie animuję je? A może jest mniej skomplikowany sposób? Jakikolwiek przykładowy kod byłby doceniany, ponieważ wszystkie przykłady, które znalazłem, nie przenoszą subskrybcji z jednego widoku do drugiego.

ETA: Im więcej o tym myślę, tym bardziej się zastanawiam: jest to lepiej obsługiwane przy pomocy UICollectionView z układem przepływu, i po prostu mieć szczegółowość animowanej zmiany rozmiaru komórki do pełnego rozmiaru ekran?

+0

Czy masz na myśli to, że poruszasz się między kontrolerami widoku? –

+0

Tak. Używam UINavigationController. Stuknięcie komórki w UITableView popchnie szczegółowy UIViewController na stos, a ja chcę użyć nowych animowanych przejść w iOS7, aby to zrobić. –

+0

Dzisiaj robię to samo. Jedyne, co odkryłem do tej pory i nie podoba mi się to, ponieważ wydaje się być hackowskie, znajdowało się w mojej klasie protokołu UIViewControllerAnimatedTransitioning w celu zaimportowania mojej klasy docelowej, ujawnienia właściwości subivew jako publicznych, a następnie w animateTransition: w celu dostosowania ich ramek/skali . Działa, ale nie jestem z nim zadowolony jako rozwiązanie. – Augie

Odpowiedz

11

Animacje kalendarza iOS7 są, jak sądzę, wykonane z animowanymi układami przejścia, które są wspaniałe, ale nie do końca takie, jakie chcesz w tej sytuacji. Poza tym wydają się trzymać Cię w tym samym kontrolerze widoku, co może nie być odpowiednie dla scenariusza ze szczegółami szczegółowymi opisanymi powyżej.

Ostatnio bawiłem się animowanymi przejściami i odkryłem, że nowe widoki migawek dostępne w iOS7 są świetne do tego typu rzeczy.

Jestem wielkim fanem układu automatycznego, ale animacje przejścia za pomocą więzów są zbyt skomplikowane. Można jednak założyć, że na początku transformacji, twoje poglądy są już rozplanowany, dzięki czemu można stosować następujące zasady:

  • Dodaj pogląd przychodzące do widoku hierarchii
  • Tworzenie pustego widoku kanwy na początku tej
  • utworzyć migawkę widoku wychodzącego (s) i dodać do tego płótna
  • utworzyć migawkę widoku przychodzącego (s) i dodać do tego płótna
  • wykonać animacje pomiędzy dwa
  • Usuń płótnie

ponieważ układ już się stało, można użyć center lub frame właściwości istniejących poglądów na tych migawek, a tylko animować tych. Dzięki temu kod jest znacznie łatwiejszy do odczytania. Oto, co robi powyższy komentarz Augie.

W twoim przypadku możesz uzyskać efekt, który wykonujesz, wiążąc różne widoki wybranej komórki z widokami kontrolera nadchodzącego i animując je do nowych pozycji.

Zrobiłem przykładowy projekt z tym przejściem, dostępny on GitHub.Efekt końcowy wygląda tak:

example video

To tylko krótki przykład, aby pokazać, w jaki sposób można wykonać animację. W kodzie produkcji prawdopodobnie sprawilibyśmy, że kontrolery uczestniczące są zgodne z protokołem, w którym zwracają liczbę widoków do wykorzystania podczas przenoszenia, zamiast bezpośredniego prezentowania właściwości i powiązania przejścia z tymi konkretnymi klasami.

+0

Dzięki! To naprawdę interesująca technika. Nie jestem pewien, czy w pełni rozumiem, co się dzieje, ale nie mogę się doczekać, żeby w to zagłębić się i odgadnąć. –

+0

Z przyjemnością dodamy więcej szczegółów, jeśli istnieją określone części, których nie przestrzegasz. Po prostu daj mi znać. – jrturton

+0

@jrturton jest to bardzo dobre, ale chciałem zapytać, czy to nadal jest poprawna implementacja i czy migawki były wydajne? Ciekawi mnie, dlaczego nie można bezpośrednio animować etykiet? Kolejne pytanie brzmiałoby, że gdyby tylko obraz przesunął się na pozycję, a następnie inne elementy, które były nowe, czy warto było je zanikać? Może po prostu zaniknąć kolor tła płótna? Próbuję replikować Material Design Transitions w systemie Android. – user1416564