私はUIViewAnimationOptionShowHideTransitionViewsオプションを使用します。これにより、toViewとfromViewの両方が遷移前にビュー階層内にあることができますが、一方が表示され、他方が非表示になります。
toViewを非表示に設定し、スーパービューに追加し、移行前に制約をインストールします。その後、完了ブロック内の古いビューを削除することができます。このような何か:
[toView setHidden: YES];
[containerView addSubview: toView];
[containerView addConstraints: [NSLayoutConstraint constraintsWithVisualFormat: @"|[toView]|" options: 0 metrics: nil views: NSDictionaryOfVariableBindings(containerView, toView)]];
[containerView addConstraints: [NSLayoutConstraint constraintsWithVisualFormat: @"V:|[toView]|" options: 0 metrics: nil views: NSDictionaryOfVariableBindings(containerView, toView)]];
[UIView transitionFromView: fromView toView: toView duration: 1.0 options: UIViewAnimationOptionTransitionFlipFromBottom | UIViewAnimationOptionShowHideTransitionViews completion:^(BOOL finished) {
[fromView removeFromSuperview];
}];
。 show/hideオプションが使用されても、fromViewがスーパービューから自動的に削除されました。 – Andy
呼び出し後のビュー階層を見ると、fromViewは(少なくともiOS 6とiOS 7では)スーパービューから挑戦的に削除されません – honus
AutoLayout制約でフリップアニメーションを使用するには、 'UIViewAnimationOptionShowHideTransitionViews'を設定する必要があります –