Как поменять barTintColor без анимации на iOS7?
На iOS7 мы можем изменить цвет панели навигации
self.navigationController.navigationBar.barTintColor = [UIColor redColor];
Но этот метод имеет затухающую анимацию при изменении barTintColor. Так кто-нибудь знает, как предотвратить эту анимацию и немедленно изменить цвет?
Чтобы быть более конкретным, я написал тестовую программу, корневым контроллером окна которой является navigationController. А в навигационном контроллере есть контроллер вида с 3 кнопками. Все 3 кнопки связаны со следующим действием:
- (void)onClick:(id)sender
{
UIColor *color = nil;
if (sender == self.redButton)
{
color = [UIColor redColor];
}
else if (sender == self.blueButton)
{
color = [UIColor blueColor];
}
else if (sender == self.blackButton)
{
color = [UIColor blackColor];
}
self.navigationController.navigationBar.barTintColor = color
// [UIView animateWithDuration:0 animations:^{
// self.navigationController.navigationBar.barTintColor = color;
// }];
// [CATransaction begin];
// [CATransaction setDisableActions:YES];
// self.navigationController.navigationBar.barTintColor = color;
// [CATransaction commit];
}
И изменение длительности анимации до 0 или использование [CATransaction setDisableActions:YES]
не работает, анимация все еще существует.
Надеюсь, что кто-то может помочь, спасибо!
4 ответа
Попробуйте установить barTintColor на ноль, прежде чем устанавливать его снова.
self.navigationController.navigationBar.barTintColor = nil;
self.navigationController.navigationBar.barTintColor = color;
У меня была похожая проблема, и она исправила ее для меня. Надеюсь, поможет.
Задавать translucent
собственность на UINavigationBar
в NO
, затем сбросьте его после изменения оттенка
self.navigationBar.translucent = NO;
self.navigationBar.barTintColor = [UIColor magentaColor];
self.navigationBar.translucent = YES;
Вам нужно отключить неявную анимацию. Вы можете сделать это следующим образом:
[CATransaction begin];
[CATransaction setDisableActions: YES];
self.navigationItem.leftBarButtonItem.tintColor = [UIColor colorWithRed:125.0/255.0 green:90.0/255.0 blue:146.0/255.0 alpha:1];
[CATransaction commit];
Эта техника работает для любой неявной анимации. Неявная анимация - это анимация, созданная для вас iOS при изменении свойства анимации. Смотрите здесь для более подробной информации:
Попробуй с
[UIView animateWithDuration:0 animations:^{
self.navigationController.navigationBar.barTintColor = [UIColor redColor];
}];