Domanda

Vorrei seguire una scena di destinazione attraverso un pulsante presente nella scena di origine. Vorrei anche avere un controllo dell'animazione di transizione tra ViewController (voglio animare le 2 viste da destra a sinistra). È possibile farlo attraverso la sostituzione di Sostituisci? Provo sia la sostituzione di Segue che la Push Segue, ma il seguito non sta accadendo alcun suggerimento su come dovrei procedere lì? Grazie!

È stato utile?

Soluzione

Ho scoperto che la sostituzione di Segue e Push Segue erano fuorvianti perché la sostituzione sembra essere disponibile per un controller di dettaglio principale e la spinta seguì solo per un controller di navigazione. In questo caso avevo invece implementare un seguito personalizzato. È necessario sottoclassizzare l'UistoryboardSegue e sovrascrivere il seguito.

Ecco un EG del mio codice:

-(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'idea principale è quella di creare una vista di screenshot della scena di origine e destinazione; Aggiungili alla vista della scena di destinazione, controlla l'animazione di queste due visualizzazioni, chiama la funzione PresentModalViewController sul SourceViewController e rimuovi le visualizzazioni di due schermate quando eseguite con l'animazione.

Si può trovare un esempio di implementazione di una funzione di utilità dello screenshot qui in CH15 di questo link: http://learnipadprogramming.com/source-code/

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top