2010-08-19 3 views
11

Приложение Skype для iPhone использует анимированные иконки TabBar. Например, во время входа в систему самый правый значок вкладки показывает циркуляционные стрелки. При вызове значка закладки «Звонок» мягко мигает, что, очевидно, выполняется с помощью анимации.UITabBarItem Icon Animation

Интересно, как можно анимировать значки элементов панели вкладок.

В моем конкретном случае, когда пользователь нажимает кнопку «Избранное», он переходит на элемент панели «Избранное». Я уже реализовал анимацию прыжков, но я хотел бы, чтобы соответствующий значок панели таблеток мигал в конце анимации, чтобы придать ей ощущение полноты.

Любые предложения относительно направления, в котором я должен искать?

Заранее спасибо.

+0

Как вы реализуете прыжки анимации? –

+0

Мне нравится [RAMAnimatedTabBarController] (https: // cocoapods.org/pods/RAMAnimatedTabBarController) –

ответ

11

Я удивлен, как легко решение было!

метод Add для вашего приложения класса делегата .m-файла (или любой другой класс, который управляет вашей UITabBar), содержащий следующие рутина:

  1. Создание UIImageView, который будет использоваться для анимации.
  2. Добавьте его в свой вид TabBar, используя метод addSubview:.
  3. Сложите его до размера UITabBarItem (используйте размер рамки UITabBar и количество элементов панели табуляции, чтобы рассчитать размер фрейма).
  4. Настройте значение imageView frame.origin.x, чтобы поместить изображение прямо над элементом bat tab, который вы хотите оживить.
  5. Добавить анимацию, которую вы хотите для изображения (вы можете играть с непрозрачностью, менять несколько изображений - все, что угодно).

Довольно легко, вам не так кажется?

Вы можете вызвать этот метод в экземпляре UIApplicationDelegate в любом месте, где вам нужно анимировать элемент панели вкладок.

Также важно заметить, что вы можете нажать ЧЕРЕЗ изображениеView, чтобы выбрать элемент панели вкладок, как если бы не было изображения над панелью вкладок. Много интересных выводов можно сделать здесь на то, что вы можете сделать, если вы это знаете ...

+0

Это не будет работать с динамической шириной UITabBar. –

0

Я этого не сделал, но я бы просто попытался построить CAAnimation, например. с помощью CABasicAnimation и добавьте его в UITabBarItem, который хотите анимировать.

Для получения дополнительной информации о том, как настроить CABasicAnimation смотрите в Руководстве по программированию Core Animation: http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/CoreAnimation_guide/Articles/AnimatingLayers.html#//apple_ref/doc/uid/TP40006085-SW1

+0

Нет, я уверен, что это не сработает, потому что UITabBarItem - это не просто взгляд - он происходит из NSObjest (базового класса) и UIBarItem (там тоже ничего интересного). Кажется, что нет ни слоя, ни даже фрейма. Но мне удалось решить эту проблему, введя «бэкдор». Спасибо за идею, хотя –

0

Вы можете анимировать иконки TabBar, получая свою точку зрения, а затем делать все, что анимацию вам нравится UIView. Ниже приведен простой пример с масштабированием, привет!

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 
       } 
      }) 
     } 
    } 

пс: назначьте тег для каждого UITabBarItem в порядке