Comment effectuez-vous une séquence personnalisée (Segue Modal) à partir d'un UIBUTTON dans Storyboard

StackOverflow https://stackoverflow.com/questions/9466231

Question

Je voudrais découvrir une scène de destination à travers un bouton présent dans la scène source. Je voudrais également avoir un contrôle de l'animation de transition entre ViewController (je veux animer les 2 vues de droite à gauche). Est-il possible de le faire via le remplacement de Segue? J'essaie à la fois le remplacement Segue et la poussée de la poussée, mais la séquence ne se produit aucune suggestion comment je devrais y procéder? Merci!

Était-ce utile?

La solution

J'ai découvert que le remplacement Segue et Push Segue était trompeur car le remplacement semble être disponible pour un contrôleur de détail maître et la viande de push pour un contrôleur de navigation uniquement. Dans ce cas, je devais implémenter un segue personnalisé à la place. Vous devez sous-classer l'uistoryboardsegue et remplacer le SEGUE Perform.

Voici un par exemple de mon code:

-(void)perform{
    UIView *sourceView = [[self sourceViewController] view];
    UIView *destinationView = [[self destinationViewController] view];      

    UIImageView *sourceImageView;
    sourceImageView = [[UIImageView alloc] 
                       initWithImage:[sourceView pw_imageSnapshot]];

    // force the destination to be in landscape before screenshot
    destinationView.frame = CGRectMake(0, 0, 1024, 748);
    CGRect originalFrame = destinationView.frame;
    CGRect offsetFrame = CGRectOffset(originalFrame, originalFrame.size.width, 0);


    UIImageView *destinationImageView;
    destinationImageView = [[UIImageView alloc] 
                            initWithImage:[destinationView pw_imageSnapshot]];

    destinationImageView.frame = offsetFrame;  
    [self.sourceViewController presentModalViewController:self.destinationViewController animated:NO];

    [destinationView addSubview:sourceImageView];                        
    [destinationView addSubview:destinationImageView]; 

    void (^animations)(void) = ^ {                                     
        [destinationImageView setFrame:originalFrame];

    };

    void (^completion)(BOOL) = ^(BOOL finished) {                       
        if (finished) {

            [sourceImageView removeFromSuperview];
            [destinationImageView removeFromSuperview];

        }
    };

    [UIView animateWithDuration:kAnimationDuration delay:.0 options:UIViewAnimationOptionCurveEaseOut animations:animations completion:completion];
 }

L'idée principale est de créer une vue d'écran de la scène source et de destination; Ajoutez-les à la vue de la scène de destination, contrôlez l'animation de ces deux vues, appelez la fonction actuelle ModalViewController sur la sourceViewController et supprimez les deux vues d'écran lors de l'animation.

On peut trouver un exemple de mise en œuvre d'une fonction d'utilité de capture d'écran ici dans CH15 de ce lien: http://learnipadprogramming.com/source-code/

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top