如何在iOS7上不使用动画更改barTintColor?

时间:2014-01-10 10:14:32

标签: ios ios7 uinavigationbar bartintcolor

在iOS7上,我们可以通过

更改导航栏的颜色
self.navigationController.navigationBar.barTintColor = [UIColor redColor];

但是这个方法在更改barTintColor时有一个淡入淡出的动画,那么有没有人知道如何阻止这个动画并立即改变颜色?

更具体地说,我编写了一个测试程序,其窗口的根控制器是navigationController。在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 个答案:

答案 0 :(得分:3)

尝试将barTintColor设置为nil,然后重新设置。

self.navigationController.navigationBar.barTintColor = nil;
self.navigationController.navigationBar.barTintColor = color;

我有一个类似的问题,它为我修复了它。希望它有所帮助。

答案 1 :(得分:1)

您需要禁用隐式动画。您可以按如下方式执行此操作:

[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在您更改动画属性时为您创建的动画。有关更多信息,请参见此处:

https://developer.apple.com/library/ios/documentation/cocoa/conceptual/coreanimation_guide/CreatingBasicAnimations/CreatingBasicAnimations.html

答案 2 :(得分:1)

translucent上的UINavigationBar属性设置为NO,然后在更改条形色调后重置

self.navigationBar.translucent = NO;
self.navigationBar.barTintColor = [UIColor magentaColor];
self.navigationBar.translucent = YES;

答案 3 :(得分:-1)

尝试

[UIView animateWithDuration:0 animations:^{
        self.navigationController.navigationBar.barTintColor = [UIColor redColor];
}];