34

iOS 7 では、が表示されると、システムはすべてのコントロールをグレーにUIActionSheetアニメートします。tintColorシートが閉じられると、アニメーションが戻ってきます。

色合いを使用するカスタム背景画像またはdrawRect実装を備えたコントロールがいくつかあり、システム コントロールと同じようにその変化をアニメートしたいと考えています。

Apple は に追加- (void)tintColorDidChangeしましたUIViewが、この方法で新しい色で再描画しても変更はアニメーション化されません。フル カラーからフル グレーにすぐに切り替わるだけで、周りの他のシステム コントロールがアニメーション化していると見栄えが悪くなります。

tintColorカスタム描画コントロールでApple のようにトランジションをアニメーション化するにはどうすればよいですか?

4

3 に答える 3

28

これは、ビュー レイヤーにコア アニメーション トランジションを適用して行うことができます。

//set up transition
CATransition *transition = [CATransition animation];
transition.type = kCATransitionFade;
transition.duration = 0.4;
[self.layer addAnimation:transition forKey:nil];

//now trigger a redraw of the background using the new colour
//and the transition will cover the redraw with a crossfade
self.flagToIndicateColorShouldChange = YES;
[self setNeedsDisplay];

編集: 再描画の正確な方法によっては、アニメーションと再描画の間に競合状態が発生する場合があります。試した元の再描画コードをすぐに更新して (アニメーションなしで) 投稿できる場合は、より具体的な回答を提供できます。

于 2013-11-05T21:05:50.760 に答える
7

試しましたtintAdjustmentModeか?

WWDC 2013 セッション 214 Customizing Your App's Appearance for iOS 7を視聴し、 TicTacToe デモ アプリを読む必要があります。

このようなもの

- (void)onPopupOpened
{
    [UIView animateWithDuration:0.3 animations:^{
        window.tintAdjustmentMode = UIViewTintAdjustmentModeDimmed;
    }];

    popupView.tintAdjustmentMode = UIViewTintAdjustmentModeNormal;
    popupView.tintColor = [UIColor redColor];
}

- (void)onPopupClosed
{
    [UIView animateWithDuration:0.3 animations:^{
        window.tintAdjustmentMode = UIViewTintAdjustmentModeAutomatic;
    }];
}
于 2014-02-24T06:19:50.760 に答える