移行中に、このアプリのナビゲーション バーを単色から透明色にアニメーション化しようとしています。
およびプロパティも、新しいビュー コントローラーに対して変更されます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 未満の色を使用しようとすると、その色は 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];
}];
明らかに、これは元の色からView ControllerのthemeColor
プロパティに100%のアルファで色をアニメーション化し、遷移が終了する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% の最終画像に設定するだけです。
themeColor
移行中に元の色の 100% アルファから 0% アルファにアニメーション化する方法を探しています。したがって、バーは (たとえば) 青から赤へ、および 1.0 アルファから 0.0 アルファへとアニメーション化されます。
これは可能ですか?誰でも方法を知っていますか?