Имитационная анимация UITabBarItem

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

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

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

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

Спасибо заранее.

Ответ 1

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

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

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

Довольно легко, вы так не думаете?

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

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

Ответ 3

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

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

Ответ 4

Вы можете анимировать значки в виде вкладок, получая его представление, а затем выполняйте любую анимацию, как вам нравится в 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
                }
            })
        }
    }

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