UinavigationControllerの「戻る」ボタンをアニメートする
-
29-09-2020 - |
質問
ビューコントローラのカスタムボタンを使用すると、ナビゲーションコントローラのheirarchyのカスタムボタンがあります。これを押すと、表示ビューコントローラが表示されます。
View ControllerのクローズをアニメートするためにUiviewのtransform
プロパティを使用します。それは動作しますが、 `POPViewControlLernimated:yes 'を使った場合、私のカスタム変換も機能しますが、アニメーションのデフォルトの左スライドはまだあります。
popViewControllerAnimated:NO
を設定した場合は、まったくアニメートしません。
CATransition
がpopViewControllerAnimated
に設定されている場合に機能するNO
を使用していますが、パブリックAPIの一部である「ズーム」効果はありません。カスタムフィルタもiPhone、OS Xのみで利用できません。
だから私の質問は次のとおりです。
1)デフォルトの遷移の左スライドを取り外す方法はまだtransform
を使用してカスタムアニメーションを持っていますか?
2)CATransition
のカスタムフィルタを使用する方法は?
3)ズーム効果のためにプライベートAPIを使用する場合、拒絶ビンで私のアプリを投げますか?
誰もが見落としている解決策を持っていますか?
解決
あなたが説明するものと似たものをやりました、すなわちUinavigationControllerでのPOPとプッシュのデフォルトのアニメーションを変更しました。
アイデアは、オブジェクトのデフォルトのアニメーションを無効にして、それを自分のアニメーションに置き換えることです。 UinavigationControllerに新しいカテゴリを作成し、以下のものと同様の機能を使用しました。
- (void) altAnimatePopViewControllerAnimated:(BOOL)animated
{
[CATransaction begin];
CATransition *transition;
transition = [CATransition animation];
transition.type = kCATransitionPush; // Use any animation type and subtype you like
transition.subtype = kCATransitionFromTop;
transition.duration = 0.3;
CATransition *fadeTrans = [CATransition animation];
fadeTrans.type = kCATransitionFade;
fadeTrans.duration = 0.3;
[CATransaction setValue:(id)kCFBooleanTrue
forKey:kCATransactionDisableActions];
[[[[self.view subviews] objectAtIndex:0] layer] addAnimation:transition forKey:nil];
[[[[self.view subviews] objectAtIndex:1] layer] addAnimation:fadeTrans forKey:nil];
[self popViewControllerAnimated:YES];
[CATransaction commit];
}
.
コードを使用するためだけにコード
[self.navigationController altAnimatePopViewControllerAnimated:YES];
.
プッシュをするために、別の同様の機能を作成し、アニメーションを逆にしてください。
完璧ではありませんが機能します。異なるアニメーションタイプを選択すると、ナビゲーションバー/コントローラを作成するためにナビゲーションバー/コントローラを作成する別のサブビューで再生されます。
私のかなり白を迎えましたので、それを賢く使ってください:)
*******
を編集プッシュトランジションをこれで置き換えてみてください(自分で試してみなかった):
CAKeyframeAnimation *scale = [CAKeyframeAnimation animationWithKeyPath:@"transform.scale"];
scale.duration = duration;
scale.values = [NSArray arrayWithObjects:[NSNumber numberWithFloat:.5f],
[NSNumber numberWithFloat:1.2f],
[NSNumber numberWithFloat:.85f],
[NSNumber numberWithFloat:1.f],
nil];
.
これはポップインをするでしょう、すなわちviewは正しいサイズに落ち着く前に大きくなるでしょう。アニメーションの曲線を制御するために配列内の値で再生します。