2010-08-19 12 views
11

Aplikacja Skype dla iPhone'a korzysta z animowanych ikon TabBar. Na przykład podczas logowania ikona na prawej stronie karty pokazuje strzałki w obiegu. Podczas wywoływania ikony zakładki "Zadzwoń" delikatnie miga, co oczywiście odbywa się poprzez animację.UITabBarItem Icon Animation

Zastanawiam się, jak można animować ikony elementów paska kart.

W tym szczególnym przypadku, gdy użytkownik naciśnie przycisk "Ulubione", przeskoczy na pasek zakładek "Ulubione". Mam już zaimplementowaną animację skaczącą, ale chciałbym, aby odpowiednia ikona paska kart migała na końcu animacji, aby zapewnić poczucie kompletności.

Jakieś sugestie dotyczące kierunku, w którym powinienem zaglądać?

Z góry dziękuję.

+0

Jak realizować animację skoki? –

+0

Lubię [RAMAnimatedTabBarController] (https: // cocoapods.org/pods/RAMAnimatedTabBarController) –

Odpowiedz

11

Jestem zaskoczony, jak łatwo było rozwiązanie!

metoda dodawania do klasy Delegat .m-plik aplikacji (lub jakakolwiek inna klasa, która zarządza UITabBar) zawierające następujące rutynowe:

  1. Utwórz UIImageView, który będzie używany do animacji.
  2. Dodaj go do widoku TabBar za pomocą metody addSubview:.
  3. Dostosuj go do rozmiaru UITabBarItem (użyj rozmiaru ramki UITabBar i liczby elementów paska kart do obliczenia rozmiaru klatki).
  4. Dostosuj wartość imageView o wartości frame.origin.x, aby umieścić obraz bezpośrednio nad elementem batonu, który chcesz animować.
  5. Dodaj animację, którą chcesz do obrazuView (możesz grać z kryciem, zamienić kilka zdjęć - wszystko, co chcesz).

Bardzo łatwe, nie sądzisz?

Możesz wywołać tę metodę w instancji UIApplicationDelegate w dowolnym miejscu, aby animować element paska karty.

Należy również zauważyć, że można dotknąć POPRZEZ obraz, aby wybrać element paska kart tak, jakby na pasku kart nie było żadnego obrazu. Wiele ciekawych wniosków można zrobić tu na tym, co można zrobić, jeśli go znasz ...

+0

To nie zadziała z dynamiczną szerokością UITabBar. –

0

Nie zrobiłem tego, ale chciałbym po prostu spróbować zbudować CAAnimation np. z CABasicAnimation i dodaj go do UITabBarItem, który chcesz animować.

Szczegółowe informacje na temat jak skonfigurować CABasicAnimation zobaczyć Programming Guide Core Animation: http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/CoreAnimation_guide/Articles/AnimatingLayers.html#//apple_ref/doc/uid/TP40006085-SW1

+0

Nie, jestem pewien, że to nie zadziała, ponieważ UITabBarItem nie jest rodzajem widoku - pochodzi z NSObjest (podstawowa klasa) i UIBarItem (nic ciekawego tam również). Wygląda na to, że nie ma warstwy ani ramki do grania. Ale udało mi się rozwiązać ten problem, wprowadzając "backdoor". Dzięki za pomysł –

0

można animować ikon umieszczenie zakładek dostając swój pogląd, a następnie zrobić cokolwiek animację jako lubisz dla UIView. Poniżej znajduje się prosty przykład z transformacją skali, dopinguj!

func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem){ 
     var tabBarView: [UIView] = [] 

     for i in tabBar.subviews { 
      if i.isKind(of: NSClassFromString("UITabBarButton")!) { 
       tabBarView.append(i) 
      } 
     } 

     if !tabBarView.isEmpty { 
      UIView.animate(withDuration: 0.15, animations: { 
       tabBarView[item.tag].transform = CGAffineTransform(scaleX: 1.2, y: 1.2) 
      }, completion: { _ in 
       UIView.animate(withDuration: 0.15) { 
        tabBarView[item.tag].transform = CGAffineTransform.identity 
       } 
      }) 
     } 
    } 

ps: proszę przypisać znacznik do każdego UITabBarItem w celu