我正在尝试在过渡期间将此应用程序的导航栏从纯色设置为透明色。
新视图控制器的barStyle
和translucent
属性也会发生变化。
我这样做的原因是因为我们使用透明导航栏并在滚动过程中将其淡入...
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
CGFloat offsetY = scrollView.contentOffset.y;
CGFloat maxY = self.headerHeight - 64;
CGFloat percentage = MIN(0.996, MAX(0, [self alphaFromPercentageWithEasing:offsetY / maxY]));
[self.navigationController.navigationBar setBackgroundImage:[UIColor imageFromColor:self.themeColor alpha:percentage] forBarMetrics:UIBarMetricsDefault];
}
这在滚动时工作正常,但为了获得透明的导航栏,您必须backgroundImage
使用navigationBar
. 如果您尝试使用alpha
小于 1 的颜色,则使用 alpha 为 1 的颜色。所以您不能只使用透明颜色。
我遇到的问题是,在过渡期间我有transitionCoordinator
这样做......
[self.transitionCoordinator
animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
self.navigationController.navigationBar.barTintColor = self.themeColor;
}
completion:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
// this is so that when popping back to here the bar alpha
// is set correctly from the current scroll position
[self scrollViewDidScroll:self.tableView];
}];
显然,这会将颜色从原始颜色动画到themeColor
具有 100% alpha 的视图控制器的属性,然后当转换完成时,它就会navigationBar
消失。
我什至尝试过在图像之间制作动画......
[self.navigationController.navigationBar setBackgroundImage:[UIColor imageFromColor:originalColor alpha:1.0] forBarMetrics:UIBarMetricsDefault];
[self.transitionCoordinator
animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
[self.navigationController.navigationBar setBackgroundImage:[UIColor imageFromColor:self.themeColor alpha:0] forBarMetrics:UIBarMetricsDefault];
}
completion:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
// this is so that when popping back to here the bar alpha
// is set correctly from the current scroll position
[self scrollViewDidScroll:self.tableView];
}];
但这只是将其设置为具有 0% alpha 且没有动画的最终图像。
themeColor
我正在寻找一种在过渡期间从原始颜色的 100% alpha 到 0% alpha 的动画方法。因此,条形图将从(例如)蓝色变为红色以及从 1.0 alpha 变为 0.0 alpha。
这甚至可能吗?有谁知道怎么做?