Domanda

Sto cercando di implementare una transizione flip simile a IBooks come uno storyboard.Il segue dovrebbe spingere resp.Pop il destinationViewController su / dalla pila di uinavigationcontrollers.

Posso spingere i viewControllers nel mio metodo perform Segues ma non sono in grado di pop.Quando pop il controller subito dopo aver creato la mia animazione flip, l'animazione non funziona e il suo callback, che dovrebbe eseguire [[UIApplication sharedApplication] endIgnoringInteractionEvents] non viene mai chiamato e i miei risultati dell'app morti.

Così ho provato a spingere / pop nel metodo Delegate animationDidStop:anim:flag ma non viene mai chiamato con il flag impostato su TRUE.

Suppongo che il seguisca sia deallocato prima che il metodo delegato venga chiamato.Cos'altro potrei fare?

È stato utile?

Soluzione

Perdonami Se sono completamente fraintendendo questa domanda, ma sembra che tu voglia solo fare un flip orizzontale di base avanti e indietro tra due controller di visualizzazione. E anche se lo hai già capito, forse aiuterà chiunque altro abbia la stessa domanda.

(1) Nello Storyboard (che ha ViewController A & B) Creare un segu-Modal da A a B. Dai un identificatore (ShowviewControllerb) e scegliere Transizione: Flip orizzontale.

Impostiamo il protocollo e i delegati:

(2a) in viewcontrollerb.h Aggiungere sopra @interface:

@class ViewControllerB;

@protocol ViewControllerBDelegate
    - (void)viewControllerBDidFinish:(ViewControllerB *)controller;
@end
.

(2b) Aggiungi il delegato come proprietà:

@property (weak, nonatomic) id <ViewControllerBDelegate> delegate;
.

(3a) in viewcontrollerb.m Sintetize:

@synthesize delegate;
.

(3b) e delegato nel metodo per rovesciare:

- (IBAction)flipBack:(id)sender
{
    [self.delegate viewControllerBDidFinish:self];
}
.

(4) in ViewControllera.h Aggiungi all'inizio #import "ViewControllerB.h" e alla fine di @interface <ViewControllerBDelegate>

(5a) in viewcontrollera.m Aggiungere il metodo per conformare al protocollo:

- (void)viewControllerBDidFinish:(ViewControllerB *)controller
{
    [self dismissModalViewControllerAnimated:YES];
}
.

(5b) quindi impostalo come Delegato in PreseForseGue:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"showViewControllerB"]) {
        [[segue destinationViewController] setDelegate:self];
    }
}
.

Spero che questo risponda alla tua domanda. Se ho frainteso, fammelo sapere.

Altri suggerimenti

La tua domanda è un po 'confusa come così mescolando Pop, spingere, flip e backflip. Non sono sicuro che Ai possa rispondere alla tua domanda, ma posso dire cosa ho fatto.

Se spingo un viewcontroller nello stack del controller di navigazione e impostare lo stile Segue Storyboard per spingere, verrà spinto nella vista da destra a sinistra. Viene visualizzato un pulsante Indietro e mostra il titolo del presentingViewController in esso.

Se ho impostato lo stile segue dello storyboard in moda, posso impostare la transizione per capovolgere orizzontale (ciò che sembra essere ciò che vuoi). Ma poi non apparirà il pulsante Indietro. Nel presenzedviewcontroller, respingere la vista con:

[self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
.

capovolgerà la seconda vista con un flip destro.

Ma questa è la soluzione sporca e non è raccomandata da Apple.

http://developer.apple.com/library/ios/featedArticles/viewcontrollerpgforiphoneos/ManagingDataflowbetweenViewControllers/ManagingDataFlowbetweenViewControllers.html#//apple_ref/doc/uid/tp40007457-Ch8-SW9

Luke Dubert ti ha dato un esempio come implementare il delegato.

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