7

よりスムーズな効果のためにアニメーションで色合いを変更することは可能ですか?

これは私にはうまくいきません:

[UIView beginAnimations:nil context:nil];
[self.navigationController.navigationBar setTintColor:[UIColor greenColor]];
[UIView commitAnimations];

CGを使用してグラデーションを生成すると思われるため、ネイティブのAppleコンポーネントを使用することさえ可能かどうかはわかりません...独自のソリューションの構築を開始する前に確認したいだけです...

みんな乾杯:)

4

3 に答える 3

26

実際にそれを可能にするために私が費やした長さは信じられないでしょう。これは iOS のストック機能ではなく、viewController をプッシュ/ポップするアニメーションが非常にスムーズであるのに、tintColor の遷移が見苦しく見えることに、私は最後まで悩まされました。

いつフェードするかをチェックするコードはたくさんあります。私は PSPDFNavigationAppearanceSnapshot というクラスを書いて、ポップされたときにナビゲーションの状態を保持しています。(素晴らしいNimbusKitからそのアイデアを得ました)

実際のアニメーションはとても簡単です:

[self.navigationController.navigationBar.layer addAnimation:PSPDFFadeTransition() forKey:nil];

CATransition *PSPDFFadeTransition(void) {
    return PSPDFFadeTransitionWithDuration(0.25f);
}

CATransition *PSPDFFadeTransitionWithDuration(CGFloat duration) {
    CATransition *transition = [CATransition animation];
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    transition.type = kCATransitionFade;
    transition.duration = duration;
    return transition;
}

そのコードをさらにコンパクトにすることができます。これは私の iOS PDF ライブラリ PSPDFKit から抜粋したもので、さまざまな場所でフェードを使用しているため、ヘルパー機能を使用しています。

于 2012-09-17T09:26:57.570 に答える
4

別のスレッドで解決策を見つけます: Transition Color navBar

解決策は、属性 barTinTColor をアニメーション化することでした。コードは次のとおりです。

 self.navigationController.navigationBar.barTintColor = [UIColor redColor];
 [UIView animateWithDuration:5.0f animations:^{
    self.navigationController.navigationBar.barTintColor = [UIColor blueColor];
} completion:^(BOOL finished) {
}];
于 2013-12-05T10:09:25.930 に答える
4

バーの色合いをアニメーション化することはできません。この方法でアニメーション化できる (UIView の) プロパティのリストはこちらです。

背景色が変化している UIView でニュートラルな色合いのバーをオーバーレイしたい場合を除き、それはまったくできないと思います。backgroundColor は、アニメーション化できるプロパティの 1 つです。しかし、ナビゲーション バーの上に UIView を配置したい場合は、こっそりする必要があるかもしれません。その方法はわかりません。

もう1つの考え-drawRectで自分で描画をサブクラス化して実行しますか?

于 2011-04-12T01:01:37.037 に答える