Ios 在推送序列上设置barTintColor动画

Ios 在推送序列上设置barTintColor动画,ios,iphone,objective-c,uinavigationbar,bartintcolor,Ios,Iphone,Objective C,Uinavigationbar,Bartintcolor,当从一个视图控制器转换到另一个时,我想设置bartincolor属性的动画 我尝试了以下解决方案: [[self transitionCoordinator] animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context) { self.navigationController.navigationBar.translucent = NO; self.navi

从一个
视图控制器转换到另一个
时,我想设置
bartincolor
属性的动画

我尝试了以下解决方案:

[[self transitionCoordinator] animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context) {
    self.navigationController.navigationBar.translucent = NO;
    self.navigationController.navigationBar.barTintColor = [UIColor redColor];
} completion:nil];
但这会导致动画完成后导航栏的
barTintColor
值略微跳变。这是意料之中的,因为半透明和不透明的颜色是不同的

类似问题:

提前谢谢

编辑

CGFloat bR = ((bcR - cR) * alpha + cR);
CGFloat bG = ((bcG - cG) * alpha + cG);
CGFloat bB = ((bcB - cB) * alpha + cB);
cR, cG, cB     = original color R,G,B components
bcR, bcG, bcB  = blending color R,G,B components
alpha          = alpha value to blend with
================================================
bR, bG, bB     = blended R,G,B components

我忘了添加,如果我删除self.navigationController.navigationBar.translucent=NO,则导航栏的左上角会出现一些奇怪的缩放动画动画块中的线条。所以这也不是解决方案。

我将回答我自己的问题,同时仍然愿意接受其他建议/解决方案

我的解决方案,我认为是一个相当“干净的解决方案”,就是用合适的混合色从原始颜色制作一个alpha混合色。假设我们在导航栏后面有一个白色背景,我们希望将当前导航栏
barTintColor
动画设置为绿色。在这种情况下,我们必须混合原始绿色、白色和适当的alpha值

在玩了一些值之后,我发现alpha0.16最适合iOS 7的情况(我还没有在其他OS版本上测试过)

用我的原始问题编写的动画块用我的解决方案实现,如下所示:

注意阿尔法混合原色原色

值为

CGFloat bR = ((bcR - cR) * alpha + cR);
CGFloat bG = ((bcG - cG) * alpha + cG);
CGFloat bB = ((bcB - cB) * alpha + cB);
cR, cG, cB     = original color R,G,B components
bcR, bcG, bcB  = blending color R,G,B components
alpha          = alpha value to blend with
================================================
bR, bG, bB     = blended R,G,B components
任何喜欢此解决方案的人都可以使用我为本例编写的用于alpha混合的
UIColor
类别。你可以找到它


谢谢。

我将回答我自己的问题,同时仍然欢迎其他建议/解决方案

我的解决方案,我认为是一个相当“干净的解决方案”,就是用合适的混合色从原始颜色制作一个alpha混合色。假设我们在导航栏后面有一个白色背景,我们希望将当前导航栏
barTintColor
动画设置为绿色。在这种情况下,我们必须混合原始绿色、白色和适当的alpha值

在玩了一些值之后,我发现alpha0.16最适合iOS 7的情况(我还没有在其他OS版本上测试过)

用我的原始问题编写的动画块用我的解决方案实现,如下所示:

注意阿尔法混合原色原色

值为

CGFloat bR = ((bcR - cR) * alpha + cR);
CGFloat bG = ((bcG - cG) * alpha + cG);
CGFloat bB = ((bcB - cB) * alpha + cB);
cR, cG, cB     = original color R,G,B components
bcR, bcG, bcB  = blending color R,G,B components
alpha          = alpha value to blend with
================================================
bR, bG, bB     = blended R,G,B components
任何喜欢此解决方案的人都可以使用我为本例编写的用于alpha混合的
UIColor
类别。你可以找到它


谢谢。

我将回答我自己的问题,同时仍然欢迎其他建议/解决方案

我的解决方案,我认为是一个相当“干净的解决方案”,就是用合适的混合色从原始颜色制作一个alpha混合色。假设我们在导航栏后面有一个白色背景,我们希望将当前导航栏
barTintColor
动画设置为绿色。在这种情况下,我们必须混合原始绿色、白色和适当的alpha值

在玩了一些值之后,我发现alpha0.16最适合iOS 7的情况(我还没有在其他OS版本上测试过)

用我的原始问题编写的动画块用我的解决方案实现,如下所示:

注意阿尔法混合原色原色

值为

CGFloat bR = ((bcR - cR) * alpha + cR);
CGFloat bG = ((bcG - cG) * alpha + cG);
CGFloat bB = ((bcB - cB) * alpha + cB);
cR, cG, cB     = original color R,G,B components
bcR, bcG, bcB  = blending color R,G,B components
alpha          = alpha value to blend with
================================================
bR, bG, bB     = blended R,G,B components
任何喜欢此解决方案的人都可以使用我为本例编写的用于alpha混合的
UIColor
类别。你可以找到它


谢谢。

我将回答我自己的问题,同时仍然欢迎其他建议/解决方案

我的解决方案,我认为是一个相当“干净的解决方案”,就是用合适的混合色从原始颜色制作一个alpha混合色。假设我们在导航栏后面有一个白色背景,我们希望将当前导航栏
barTintColor
动画设置为绿色。在这种情况下,我们必须混合原始绿色、白色和适当的alpha值

在玩了一些值之后,我发现alpha0.16最适合iOS 7的情况(我还没有在其他OS版本上测试过)

用我的原始问题编写的动画块用我的解决方案实现,如下所示:

注意阿尔法混合原色原色

值为

CGFloat bR = ((bcR - cR) * alpha + cR);
CGFloat bG = ((bcG - cG) * alpha + cG);
CGFloat bB = ((bcB - cB) * alpha + cB);
cR, cG, cB     = original color R,G,B components
bcR, bcG, bcB  = blending color R,G,B components
alpha          = alpha value to blend with
================================================
bR, bG, bB     = blended R,G,B components
任何喜欢此解决方案的人都可以使用我为本例编写的用于alpha混合的
UIColor
类别。你可以找到它


谢谢。

这对我来说没什么区别。iOS9/10,根本没有动画,它只需一步改变颜色。你的解决方案是否仍然有效?或者你是否有一个在线应用程序,我可以检查它是否有效?这对我来说没有任何区别。iOS9/10,根本没有动画,它只需一步改变颜色。你的解决方案是否仍然有效?或者你是否有一个在线应用程序,我可以检查它是否有效?这对我来说没有任何区别。iOS9/10,根本没有动画,它只需一步改变颜色。你的解决方案是否仍然有效?或者你是否有一个在线应用程序,我可以检查它是否有效?这对我来说没有任何区别。iOS9/10,根本没有动画,只是