presentViewController di animazione di transizione

Nel mio codice che sto utilizzando presentViewController a chiamare la mia seconda viewcontroller

[self presentViewController:secondController animated:YES completion:nil];

Quando chiamo ho bisogno di mostrare sinistra a destra animazione (come in navigationController)

Non voglio utilizzare il navigationController ma ho bisogno di animazione simile a navigationController in presentViewController…

 

5 Replies
  1. 14

    Aggiungere questa riga di codice prima di presentare view controller

    secondController.modalTransitionStyle   = UIModalTransitionStyleCrossDissolve;
    secondController.modalPresentationStyle = UIModalPresentationFullScreen;
    
    //Take a look at this enum
    
    typedef enum {
       UIModalTransitionStyleCoverVertical = 0,
       UIModalTransitionStyleFlipHorizontal,
       UIModalTransitionStyleCrossDissolve,
       UIModalTransitionStylePartialCurl,
    } UIModalTransitionStyle;
    • No, non ha funzionato, è semplicemente va senza animazione. secondController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; // dare un’occhiata a questo typedef enum enum { UIModalTransitionStyleCoverVertical = 0, UIModalTransitionStyleFlipHorizontal, UIModalTransitionStyleCrossDissolve, UIModalTransitionStylePartialCurl, } UIModalTransitionStyle; [self presentViewController:secondController animato:SÌ completamento:nil];
    • Aggiungere UIModalPresentationStyle troppo
    • Scopri il nuovo codice
    • Ho dato come questo, ma non ha funzionato secondController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;; secondController.modalPresentationStyle = UIModalPresentationFullScreen; ; // dare un’occhiata a questo typedef enum enum { UIModalTransitionStyleCoverVertical = 0, UIModalTransitionStyleFlipHorizontal, UIModalTransitionStyleCrossDissolve, UIModalTransitionStylePartialCurl, } UIModalTransitionStyle; [self presentViewController:secondController animato:SÌ completamento:nil];
    • Si fa a impostare le proprietà prima di chiamare [UIViewController presentViewController:animati:completamento]?
    • UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@”iPhone5″ bundle:nil]; HomeViewController *secondController = (HomeViewController *)[storyboard instantiateViewControllerWithIdentifier:@”test”]; secondController.LoginID= aiuto; secondController.LoginUsername= aUsername; secondController.UserProfileImage=ProfileImage; secondController.UserOtherInfo=UserInfo;
    • Beh, cambiare il vostro stile di presentazione di UIModalPresentationStyleOverCurrentcontext
    • in iOS 11 impostazione solo yourVC.modalTransitionStyle sta lavorando bene

  2. 6

    per Swift

    Definire animazioni tipi


    enum UIModalTransitionStyle : Int {
        case CoverVertical = 0
        case FlipHorizontal
        case CrossDissolve
        case PartialCurl
    }

    Come utilizzare


    let vc : PageHomeViewController = storyboard!.instantiateViewControllerWithIdentifier("PageHomeViewController") as! PageHomeViewController
    vc.modalTransitionStyle = .FlipHorizontal
    self.presentViewController(vc, animated: true, completion: nil)
  3. 2

    La mia decisione per la risoluzione di animazione “copertura orizzontale” come un UINavigationViewController metodo push con l’utilizzo di UIViewControllerTransitioningDelegate.

    1.Creare un custom di transizione.

    Intestazione

    @interface CoverHorizontalTransition: NSObject<UIViewControllerAnimatedTransitioning>
    @property (assign, nonatomic) BOOL dismiss;
    @end

    Attuazione

    @implementation CoverHorizontalTransition
    
    - (void)animateTransition:(nonnull id<UIViewControllerContextTransitioning>)transitionContext
    {
        UIViewController *fromViewController;
        fromViewController =
        [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
    
        UIViewController *toViewController;
        toViewController =
        [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
    
        UIView *containerView = transitionContext.containerView;
    
        CGRect animatedViewFrame;
        animatedViewFrame = containerView.bounds;
        animatedViewFrame.origin = CGPointMake(CGRectGetWidth(animatedViewFrame), 0);
    
        [containerView addSubview:toViewController.view];
    
        if (_dismiss) {
            [containerView bringSubviewToFront:fromViewController.view];
    
            [UIView
             animateWithDuration:[self transitionDuration:transitionContext]
             animations:^{
                 fromViewController.view.frame = animatedViewFrame;
             } completion:^(BOOL finished) {
                 [containerView.superview addSubview:toViewController.view];
                 [fromViewController.view removeFromSuperview];
                 [transitionContext completeTransition:YES];
             }];
        } else {
            toViewController.view.frame = animatedViewFrame;
    
            [UIView
             animateWithDuration:[self transitionDuration:transitionContext]
             animations:^{
                 toViewController.view.center = containerView.center;
             } completion:^(BOOL finished) {
                 [transitionContext completeTransition:YES];
             }];
        }
    }
    
    - (NSTimeInterval)transitionDuration:(nullable id<UIViewControllerContextTransitioning>)transitionContext
    {
        return 0.25;
    }
    
    @end

    2.Creare transizione delegato.

    @implementation CustomViewControllerTransitioningDelegate
    
    - (id<UIViewControllerAnimatedTransitioning>)animationControllerForPresentedController:(UIViewController *)presented presentingController:(UIViewController *)presenting sourceController:(UIViewController *)source
    {
        return [CoverHorizontalTransition new];
    }
    
    - (id<UIViewControllerAnimatedTransitioning>)animationControllerForDismissedController:(UIViewController *)dismissed
    {
        CoverHorizontalTransition *transition;
        transition = [CoverHorizontalTransition new];
        transition.dismiss = YES;
    
        return transition;
    }
    
    @end

    Esempio di utilizzo.

    ...
    //Save delegate to strong property
    secondController.customTransitioningDelegate =
    [BaseViewControllerTransitioningDelegate new];
    
    secondController.transitioningDelegate =
    secondController.customTransitioningDelegate;
    secondController.modalPresentationStyle = UIModalPresentationCustom;
    
    [self presentViewController:secondController animated:YES completion:nil];

    Questo codice funziona per iOS 10+.

    • A mio parere la soluzione migliore. Funziona proprio come un nav controller di transizione. Grazie.
    • Secondo la documentazione di Apple developer.apple.com/library/archive/featuredarticles/…, si dovrebbe essere utilizzando viewForKey l’essere aggiunto o rimosso invece la view controller di proprietà di visualizzazione.
  4. 0

    Tutto il sopra può essere ottenuto anche in storyboard, senza dover scrivere codice. Fare clic sul collegamento che collega il view controller, quindi selezionare gli Attributi di Ispezione scheda nel menù a destra. Nel menu a discesa Tipo, selezionare ‘Presente Modale’. Un’altra serie di opzioni arriverà. Nella Transizione menu a discesa è possibile selezionare una qualsiasi delle enumerazioni sopra elencati. presentViewController di animazione di transizione

  5. -1

    @swiftboy risposta è più corretto. Non è necessario dichiarare l’enum e si può chiamare direttamente.

    let vc : PageHomeViewController = 
    storyboard!.instantiateViewControllerWithIdentifier("PageHomeViewController") 
    as! PageHomeViewController
    vc.modalTransitionStyle = .FlipHorizontal 
    self.presentViewController(vc, animated: true, completion: nil)
    • Questa è solo una copia di un’altra risposta a questa domanda. Si prega di aggiungere solo una risposta, se hai qualcosa di nuovo da aggiungere.

Lascia un commento