Как я могу анимировать изменение цвета оттенка полосы UINavigationBar, но не UITabBar?

Я реализую тему в своем приложении и столкнулся со странной ошибкой (функцией?). По какой-то странной причине я не могу использовать UIView.animate в своем пользовательском классе UITabBarController для анимации изменения цвета моего UITabBar, но точно такой же код отлично работает в пользовательском классе моего UINavigationController.

Я что-то упускаю? Есть ли что-то еще, что я могу использовать для анимации изменения цвета? Я просмотрел документы Apple, но ничего не нашел.

Вот код, который я использую в обоих случаях:

class customNavigationController: UINavigationController {
    @IBOutlet weak var navBar = ThemeManager.navigationbar

    func dusk(notification: NSNotification) {
        UIView.animateWithDuration(1, animations: {
            self.navBar?.barTintColor = UIColor(red: 79/255, green: 79/255, blue: 79/255, alpha: 1)
            self.navBar?.barStyle = UIBarStyle.Black

        })
    }
}

И:

class customTabController: UITabBarController {
    @IBOutlet weak var tab = ThemeManager.tabbar

    func dusk(notification: NSNotification) {
        UIView.animateWithDuration(1, animations: {
            self.tab?.barTintColor = UIColor(red: 79/255, green: 79/255, blue: 79/255, alpha: 1)
            self.tab?.barStyle = UIBarStyle.Black
        })
    }
}

person cyril    schedule 07.06.2015    source источник


Ответы (2)


Вы можете использовать UIView.transitionWithView для перехода между двумя состояниями.

UIView.transitionWithView(self.tab!, duration: 1.0, options: .BeginFromCurrentState | .TransitionCrossDissolve, animations: { () -> Void in
        self.tab!.barTintColor = UIColor(red: 79/255, green: 79/255, blue: 79/255, alpha: 1)
        self.tab!.barStyle = UIBarStyle.Black
    }, completion: nil)
person Allan Weir    schedule 30.06.2015
comment
На анимацию это никак не повлияло :( - person cyril; 01.07.2015
comment
Странно, я сам попробовал, прежде чем выложить. Можете ли вы поделиться своим кодом с этим реализованным? - person Allan Weir; 01.07.2015
comment
Это то же самое, что и второй приведенный выше код. Я заменил UIView.animateWithDuration(1, animations: { self.tab?.barTintColor = UIColor(red: 79/255, green: 79/255, blue: 79/255, alpha: 1) self.tab?.barStyle = UIBarStyle.Black }) - person cyril; 01.07.2015
comment
Извините, я имею в виду, можете ли вы вставить код с изменениями, которые я предложил в нем. Или вы полностью скопировали и вставили то, что я сказал? Две основные части заключаются в том, что вы используете UIView. transitionWithView вместо animationWithDuration, и что у вас есть UIViewAnimationOptions.TransitionCrossDissolve в опциях. - person Allan Weir; 02.07.2015
comment
Я сделал именно то, что вы описали, и все равно ничего :( - person cyril; 03.07.2015
comment
Вы можете проверить это на этом тестовом проекте, если хотите? dropbox.com/s/cssorc0z66sqapa/TestTabs.zip?dl=0< /а> - person Allan Weir; 03.07.2015

Что ж, чтобы изменить цвет на панели вкладок, лично я использую совершенно другое изображение с разными цветами введите описание изображения здесь

Как видите, выбранное мной изображение — мое второе изображение. Прямо сейчас это изображение не будет отображаться, если я не добавлю его в свои пользовательские атрибуты времени выполнения.

введите здесь описание изображения

Установите Keypath на selectedImage, тип на Image и значение на ваше изображение, которое вы хотите отобразить при представлении. Надеюсь, это ответит на ваш вопрос.

person Fallah    schedule 30.06.2015