UINavigationBar изменить оттенок цвета с анимацией - PullRequest
7 голосов
/ 18 февраля 2011

Можно ли изменить оттенок с анимацией для более плавного эффекта?

Это не работает для меня:

[UIView beginAnimations:nil context:nil];
[self.navigationController.navigationBar setTintColor:[UIColor greenColor]];
[UIView commitAnimations];

Я не уверен, возможно ли это даже с помощьюнативные компоненты apple, так как я предполагаю, что они будут использовать CG для создания градиента ... просто хочу узнать, прежде чем я начну создавать свое собственное решение ...

Приветствую, ребята

Ответы [ 3 ]

26 голосов
/ 17 сентября 2012

Вы не поверите тому, что я прошел, чтобы сделать это возможным;меня без конца раздражало, что это не стандартная функция iOS, и что переход tintColor выглядит уродливо, в то время как анимация для перемещения / выталкивания viewController настолько плавная.1003 * когда исчезать, и я даже написал класс с именем PSPDFNavigationAppearanceSnapshot, чтобы сохранить состояние навигации при извлечении.(Я понял эту идею из NimbusKit )

Реальная анимация довольно проста:

[self.navigationController.navigationBar.layer addAnimation:PSPDFFadeTransition() forKey:nil];

CATransition *PSPDFFadeTransition(void) {
    return PSPDFFadeTransitionWithDuration(0.25f);
}

CATransition *PSPDFFadeTransitionWithDuration(CGFloat duration) {
    CATransition *transition = [CATransition animation];
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    transition.type = kCATransitionFade;
    transition.duration = duration;
    return transition;
}

Вы можете сжать этот код еще больше;это отрывок из моей библиотеки PDF PDF iOS PSPDFKit, и я использую затухание в разных местах, таким образом, вспомогательные функции.

4 голосов
/ 05 декабря 2013

Мы находим решение в другой теме: Transition Color navBar

Решением была анимация атрибута barTinTColor.Вот код:

 self.navigationController.navigationBar.barTintColor = [UIColor redColor];
 [UIView animateWithDuration:5.0f animations:^{
    self.navigationController.navigationBar.barTintColor = [UIColor blueColor];
} completion:^(BOOL finished) {
}];
4 голосов
/ 12 апреля 2011

Вы не можете анимировать оттенок бара - список свойств (для UIView), которые можно анимировать таким образом: здесь .

Я не думаю, что вы можете сделатьэто вообще, если вы не хотите наложить полосу, которая имеет нейтральный оттенок, на UIView, цвет фона которого меняется.backgroundColor - это одно из свойств, которые можно анимировать.Но вам, возможно, придется подойти, если вы хотите поместить UIView поверх навигационной панели, я не знаю, как это сделать.

Еще одна мысль - создание подклассов и рисование самостоятельно в drawRect

...