2010-08-19 11 views
11

Skype App für iPhone verwendet animierte TabBar-Symbole. Zum Beispiel zeigt das Register ganz rechts während der Anmeldung zirkulierende Pfeile an. Während des Aufrufens des "Call" -Registersymbols blinkt sanft, was offensichtlich durch Animation erfolgt.UITabBarItem Symbol Animation

Ich frage mich, wie es möglich ist, Tab-Leiste-Symbole zu animieren.

In meinem speziellen Fall, wenn der Benutzer die Taste 'Favorit' drückt, springt er auf die Registerkarte 'Favoriten'. Ich habe bereits die Sprunganimation implementiert, aber ich möchte, dass das entsprechende Tabbarsymbol am Ende der Animation blinkt, um das Gefühl der Vollständigkeit zu erzeugen.

Irgendwelche Vorschläge über die Richtung, in die ich schauen sollte?

Vielen Dank im Voraus.

+0

Wie haben Sie die Springen Animation implementieren? –

+0

Ich mag [RAMAnimatedTabBarController] (https: // cocoapods.org/pods/RAMAnimatedTabBarController) –

Antwort

11

Ich bin überrascht, wie einfach war die Lösung!

Add-Methode in Ihre Anwendung Delegate-Klasse .m-Datei (oder jede andere Klasse, die Ihre UITabBar verwaltet) enthält die folgende Routine:

  1. eine UIImageView erstellen, die für die Animation verwendet werden soll.
  2. Fügen Sie es Ihrer TabBar-Ansicht mithilfe der Methode addSubview: hinzu.
  3. Richten Sie es auf die Größe von UITabBarItem ein (verwenden Sie die UITabBar-Rahmengröße und die Anzahl der Registerkartenelemente, um die Rahmengröße zu berechnen).
  4. Passen Sie den Wert frame.origin.x von imageView so an, dass das Bild direkt über dem zu animierenden Bat-Element platziert wird.
  5. Fügen Sie die gewünschte Animation zur imageView hinzu (Sie können mit Opazität spielen, mehrere Bilder austauschen - alles, was Sie wollen).

Ziemlich einfach, meinst du nicht?

Sie können diese Methode in der UIApplicationDelegate-Instanz überall dort aufrufen, wo Sie das Registerkartenelement animieren müssen.

Es ist auch wichtig zu beachten, dass Sie durch die imageView tippen können, um die Tab-Leiste Element als ob es kein Bild über die Tab-Leiste war. Viele interessante Schlüsse können hier durchgeführt werden, was Sie tun können, wenn Sie es wissen ...

+0

Dies funktioniert nicht mit der dynamischen Breite von UITabBar. –

0

Ich habe das nicht getan, aber ich würde nur versuchen, eine CAAnimation z. mit einem CABasicAnimation und fügen Sie es dem UITabBarItem hinzu, das Sie animiert werden möchten.

Einzelheiten dazu, wie ein CABasicAnimation finden Sie in der Core Animation Programming Guide einzurichten: http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/CoreAnimation_guide/Articles/AnimatingLayers.html#//apple_ref/doc/uid/TP40006085-SW1

+0

Nein, ich bin sicher, das wird nicht funktionieren, weil UITabBarItem keine Art von View ist - es stammt von NSObjest (Basisklasse) und UIBarItem (auch dort ist nichts interessantes). Scheint so, als ob es keine Ebene oder gar keinen Rahmen zum Spielen gibt. Aber ich habe es geschafft, dieses Problem zu lösen, indem Sie die "Hintertür" eingeben. Danke für die Idee, obwohl –

0

Sie können Tabbar Symbole animieren, indem Sie seine Ansicht bekommen, dann tun, was Animation als Sie mögen für die UIView. Unten ist ein einfaches Beispiel mit Skalierung transformieren, jubeln!

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: bitte zuweisen Tag für jede UITabBarItem um

Verwandte Themen