2010-08-19 20 views
11

L'app Skype per iPhone utilizza icone TabBar animate. Ad esempio, durante l'accesso, l'icona della scheda più a destra mostra le frecce circolanti. Mentre si chiama l'icona della scheda "Chiama", lampeggia dolcemente, che è ovviamente fatto attraverso l'animazione.UITabBarItem Icon Animation

Mi chiedo come sia possibile animare le icone degli elementi della barra delle schede.

Nel mio caso particolare quando l'utente preme il pulsante "Preferiti" salta sulla voce della barra di schede "Preferiti". Ho già implementato l'animazione del salto, ma vorrei che l'icona della barra delle schede corrispondente lampeggi alla fine dell'animazione per dare a questa sensazione di completezza.

Qualche suggerimento sulla direzione in cui dovrei cercare?

Grazie in anticipo.

+0

Come hai implementare l'animazione salto? –

+0

Mi piace [RAMAnimatedTabBarController] (https: // cocoapods.org/pods/RAMAnimatedTabBarController) –

risposta

11

Sono sorpreso quanto sia facile la soluzione era!

Add metodo per il tuo .m file classe Delegate Application (o qualsiasi altra classe che gestisce il vostro UITabBar) che contiene le seguenti impostazioni:

  1. Creare un UIImageView che verrà utilizzato per l'animazione.
  2. Aggiungilo alla visualizzazione TabBar utilizzando il metodo addSubview:.
  3. Inquadrarlo con le dimensioni di UITabBarItem (utilizzare la dimensione del frame UITabBar e il numero di elementi della barra delle schede per calcolare le dimensioni del frame).
  4. Regolare il valore frame.origin.x di imageView per posizionare l'immagine direttamente sopra l'elemento del blocco scheda che si desidera animare.
  5. Aggiungi l'animazione che vuoi a imageView (puoi giocare con l'opacità, scambiare più immagini - tutto ciò che vuoi).

Abbastanza facile, non credi?

È possibile chiamare questo metodo sull'istanza UIApplicationDelegate ovunque sia necessario per animare l'elemento della barra delle schede.

Inoltre, è importante notare che è possibile toccare tramite imageView per selezionare l'elemento della barra delle schede come se non ci fosse alcuna immagine sulla barra delle schede. Molti interessanti conclusioni possono essere fatte qui su cosa si può fare se si sa che ...

+0

Questo non funzionerà con la larghezza dinamica di UITabBar. –

0

Non l'ho fatto, ma vorrei solo provare a creare un CAAnimation ad es. con un CABasicAnimation e aggiungilo a UITabBarItem che vuoi animare.

Per ulteriori dettagli su come impostare un CABasicAnimation vedere la Guida alla programmazione Core Animation: http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/CoreAnimation_guide/Articles/AnimatingLayers.html#//apple_ref/doc/uid/TP40006085-SW1

+0

Nah, sono sicuro che questo non funzionerà perché UITabBarItem non è un tipo di vista - ha origine da NSObjest (classe base) e UIBarItem (non c'è niente di interessante anche lì). Sembra che non ci sia nessun Layer o frame con cui giocare. Ma sono riuscito a risolvere questo problema inserendo la "backdoor". Grazie per l'idea però –

0

È possibile animare le icone TabBar ottenendo la sua vista, quindi fare tutto ciò animazione come ti piace per l'UIView. Di seguito è riportato un semplice esempio con trasformazione di scala, allegria!

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: si prega di assegnare tag per ogni UITabBarItem al fine