8

In meinem Code ich presentViewController bin mit meinem zweiten ViewcontrollerpresentViewController Übergangsanimation

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

rufen, wenn ich mich nach rechts Animation zeigen links aufrufen müssen (wie in Navigation)

Ich will nicht, um den navigationController zu verwenden, brauche ich aber die animation ähnlich wie navigationController in presentViewController ...

Antwort

12

Fügen Sie diese Codezeile hinzu, bevor Sie den View Controller

secondController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 
secondController.modalPresentationStyle = UIModalPresentationFullScreen; 

// Take a look at this enum 

typedef enum { 
    UIModalTransitionStyleCoverVertical = 0, 
    UIModalTransitionStyleFlipHorizontal, 
    UIModalTransitionStyleCrossDissolve, 
    UIModalTransitionStylePartialCurl, 
} UIModalTransitionStyle; 
+0

Nein, es hat nicht funktioniert, es geht einfach ohne Animation. zweiterController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; Nehmen // einen Blick auf diese Enum typedef enum { UIModalTransitionStyleCoverVertical = 0, UIModalTransitionStyleFlipHorizontal, UIModalTransitionStyleCrossDissolve, UIModalTransitionStylePartialCurl, } UIModalTransitionStyle; [self presentViewController: secondController animiert: YES completion: nil]; –

+0

@SubramanianRaj UIModalPresentationStyle auch hinzufügen – Ch0k0l8

+0

@SubramanianRaj Schau dir den neuen Code an – Ch0k0l8

5

für Swift

Typen Animationen definieren


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

Wie


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

@swiftboy verwenden Antwort ist am corre ct. Sie müssen die Enumeration nicht deklarieren, und Sie können sie direkt aufrufen.

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

Dies ist nur eine Kopie einer anderen Antwort auf diese Frage. Bitte fügen Sie nur eine Antwort hinzu, wenn Sie etwas Neues hinzuzufügen haben. – FluffyKitten

0

Alle oben genannten können auch im Storyboard erreicht werden, ohne Code schreiben zu müssen. Klicken Sie auf Ihr Segment, das Ihre View-Controller verbindet, und wählen Sie dann im rechten Menü die Registerkarte Attribute Inspector. Im Dropdown-Menü Kind wählen Sie "Modisch präsentieren". Ein weiterer Satz von Optionen wird auftauchen. Im Dropdown-Menü "Übergang" können Sie alle aufgelisteten Enums auswählen. Segue Attributes Inspector

0

Meine Entscheidung zum Auflösen der Animation "Cover horizontal" wie eine UINavigationViewController Push-Methode mit UIViewControllerTransitioningDelegate.

1.Erstellen Sie einen benutzerdefinierten Übergang.

Kopf

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

Implementation

@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.Create Übergang delegieren.

@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 

Beispiel für die Verwendung.

... 
// Save delegate to strong property 
secondController.customTransitioningDelegate = 
[BaseViewControllerTransitioningDelegate new]; 

secondController.transitioningDelegate = 
secondController.customTransitioningDelegate; 
secondController.modalPresentationStyle = UIModalPresentationCustom; 

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

Dieser Code funktioniert für iOS 10+.

Verwandte Themen