8

移行中に、このアプリのナビゲーション バーを単色から透明色にアニメーション化しようとしています。

およびプロパティも、新しいビュー コントローラーに対して変更されますbarStyletranslucent

これを行う理由は、透明なナビゲーション バーを使用し、スクロール中にフェードインするためです...

- (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プロパティを使用する必要がありますnavigationBaralpha1 未満の色を使用しようとすると、その色は 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 アルファへとアニメーション化されます。

これは可能ですか?誰でも方法を知っていますか?

4

0 に答える 0