2016-05-17 5 views
0

私はXCodeでいくつかの巻き戻しセグを作成しました。デフォルトでは、私には望ましくないアニメーションが付いています。 Stack Overflowでいくつか検索したところ、アニメーションを無効にするためにチェックを外すことができるチェックボックスがあるはずですが、それはXcode 7にアップグレードできません。プログラムを使って巻き戻しセグアニメーションを無効にするにはどうすればよいですか?私は現在XCode 6.4を実行しています。iOS-プログラムで巻き戻してアニメーションを無効にするにはどうすればよいですか?

答えて

0

コントローラの名前をFirstControllerに戻して、SecondControllerを解雇してください。また、ここでは2つの場合があります:1つは、SecondControllerがモーダルに表示され、1つがUINavigationControllerに関係する場合です。

セグのリセット/無視modalPresentationStyleを修正する必要があります。 IBAction方法では、以下を追加します巻き戻し時にFirstControllerに呼ばれる(私はあなたがこの方法prepareForUnwindと呼ばれると仮定します):

- (IBAction)prepareForUnwind:(UIStoryboardSegue *)segue { 
    //TODO: add right condition if you have to 
    UIViewController* secondController = (UIViewController*)segue.sourceViewController; 
    secondController.transitioningDelegate = self; 
    secondController.modalPresentationStyle = UIModalPresentationCustom; 
} 

この部分はSecondControllerがモーダルであることから却下されたときに動作します。さて、FirstControllerはその代理人となるべき、両方のコントローラがUINavigationController上に存在する場合のために:

- (void)viewDidLoad { 
    self.navigationController.delegate = self; 
} 

これはUIKitのは、遷移を続くためアニメーターオブジェクトのFirstControllerを依頼するようになります。今度は返すようにFirstControllerを修正する必要があります。 FirstController.h

:それは両方のケースのためのいくつかのアニメーターオブジェクトを返すよう

@interface FirstController : UIViewController<UIViewControllerTransitioningDelegate, UINavigationControllerDelegate> 

は(心がコメント)、FirstController.mに対応するコードを追加します。

- (id <UIViewControllerAnimatedTransitioning>)animationControllerForDismissedController:(UIViewController *)dismissed 
{ 
    return [Animator new]; 
} 

- (id<UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController 
            animationControllerForOperation:(UINavigationControllerOperation)operation 
               fromViewController:(UIViewController *)fromVC 
               toViewController:(UIViewController *)toVC { 
    //This will disable ALL animations on particular UINavigationController 
    //return nil to use default animation when appropriate 
    return [Animator new]; 
} 

Animator自体を実装します。それはUIViewControllerAnimatedTransitioningプロトコルを確認する必要があります。 Animator.h

Animator.m

@interface Animator : NSObject<UIViewControllerAnimatedTransitioning> 

@end 

@implementation Animator 

- (NSTimeInterval)transitionDuration:(nullable id <UIViewControllerContextTransitioning>)transitionContext { 
    return 0; 
} 

- (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext { 
    UIViewController *controllerToDismiss = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey]; 
    UIView *viewToDismiss = [transitionContext viewForKey:UITransitionContextFromViewKey]; 
    CGRect frameToDismissTo = [transitionContext finalFrameForViewController:controllerToDismiss]; 
    viewToDismiss.frame = frameToDismissTo; 

    UIViewController *controllerToPresent = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey]; 
    UIView *viewToPresent = [transitionContext viewForKey:UITransitionContextToViewKey]; 
    CGRect frameToPresentTo = [transitionContext finalFrameForViewController:controllerToPresent]; 
    viewToPresent.frame = frameToPresentTo; 

    [[transitionContext containerView] addSubview:viewToPresent]; 

    [transitionContext completeTransition:YES]; 
} 

@end 

このpostに基づいて回答し、このso answer(両方ではない鉱山)

関連する問題