首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在push segue上动画化barTintColor

在push segue上动画化barTintColor
EN

Stack Overflow用户
提问于 2014-05-29 14:09:29
回答 1查看 784关注 0票数 0

view controller从一个过渡到另一个时,我想给属性注入动画。

我尝试了以下解决办法:

代码语言:javascript
复制
[[self transitionCoordinator] animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context) {
    self.navigationController.navigationBar.translucent = NO;
    self.navigationController.navigationBar.barTintColor = [UIColor redColor];
} completion:nil];

它将barTintColor作为动画,但我的导航栏应该是半透明的。为了解决这个问题,我尝试在trasitionCoordinator动画的完成块中将其设置为trasitionCoordinator。如下所示:

代码语言:javascript
复制
completion:^(id<UIViewControllerTransitionCoordinatorContext> context) {
    self.navigationController.navigationBar.translucent = YES;
}

但是,这会导致在动画完成后,导航栏的值略有上升。这是预期的,因为半透明和不透明的颜色是不同的。

类似问题:[1] [2]

提前感谢!

编辑

我忘记添加一些奇怪的缩放动画,如果我从动画块中删除行,就会从导航栏的左上角出现一些奇怪的动画。所以这也不是解决办法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-29 15:45:44

我将在接受其他建议/解决方案的同时回答我自己的问题。

我的解决方案,我认为是相当“干净的一个”,是使一个α混合颜色从原来的颜色与适当的混合色。因此,假设我们在导航栏后面有一个白色背景,我们希望将当前的导航栏 barTintColor动画为绿色。在这种情况下,我们必须将原始绿色与白色和适当的阿尔法值混合。

在玩了一些值之后,我发现alpha 0.16对iOS 7的效果最好(我还没有在其他操作系统版本上测试过)。

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

注意α混合原色原色

代码语言:javascript
复制
[[self transitionCoordinator] animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context) {
    self.navigationController.navigationBar.translucent = NO;
    self.navigationController.navigationBar.barTintColor = <ALPHA BLENDED ORIGINAL COLOR>;
} completion:^(id<UIViewControllerTransitionCoordinatorContext> context) {
    self.navigationController.navigationBar.barTintColor = <ORIGINAL COLOR>;
    self.navigationController.navigationBar.translucent = YES;
}];

α-共混的方程

代码语言:javascript
复制
CGFloat bR = ((bcR - cR) * alpha + cR);
CGFloat bG = ((bcG - cG) * alpha + cG);
CGFloat bB = ((bcB - cB) * alpha + cB);

值为

代码语言:javascript
复制
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

任何喜欢这种解决方案的人都可以使用我为本例编写的UIColor的阿尔法混合类别,您可以找到它的这里

谢谢。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23935398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档