iPhone - UINavigationController - Benutzerdefinierte Animation mit CATransaction

Ich versuche, eine Kategorie für UINavigationController zu erstellen, damit ich einige benutzerdefinierte Animationen zusammenstellen kann. Ich bin auf @ gestoßdiese Frag und es hat mich angefangen. Ich habe mir für eine Push-Funktion folgendes ausgedacht:

- (void)pushViewControllerMoveInFromBottom:(UIViewController *)viewController {
    [CATransaction begin];
    CATransition *transition;
    transition = [CATransition animation];
    transition.type = kCATransitionMoveIn;
    transition.subtype = kCATransitionFromBottom;
    transition.duration = 0.7;

    [CATransaction setValue:(id)kCFBooleanTrue
                     forKey:kCATransactionDisableActions];

    [[[[self.view subviews] objectAtIndex:0] layer] addAnimation:transition forKey:nil];
    [self  pushViewController:viewController animated:YES];
    [CATransaction commit];
}

Ich verstehe nicht, auf welche Ansicht / Ebene über den Aufruf der Unteransicht zugegriffen wird. Wenn mir jemand helfen könnte, das zu verstehen, wäre das hilfreich. Es scheint zu beeinflussen, welche Ansicht gerade auf den Bildschirm kommt.

AberMeine Hauptfrage ist, dass ich versuche, einen Pop zu erstellen, der die obige Funktion "rückgängig macht". Nehmen wir aus Gründen der Übersichtlichkeit an, ich habe zwei Ansichten, A und B. A ist die erste Ansicht, die auf dem Bildschirm angezeigt wird. Die obige Funktion bewegt sich in B, ohne A herauszudrücken. Ähnlich wie bei einer modalen Ansicht. Mit der folgenden Funktion wird A wieder über B verschoben, statt B nach oben zu schieben und A an Ort und Stelle zu lassen.

- (void)popViewControllerMoveInFromTop {
    [CATransaction begin];
    CATransition *transition;
    transition = [CATransition animation];
    transition.type = kCATransitionMoveIn;
    transition.subtype = kCATransitionFromTop;
    transition.duration = 0.7;

    [CATransaction setValue:(id)kCFBooleanTrue
                     forKey:kCATransactionDisableActions];

    [[[[self.view subviews] objectAtIndex:0] layer] addAnimation:transition forKey:nil];
    [self  popViewControllerAnimated:YES];    
    [CATransaction commit];
}

Ich möchte keine modale Ansicht verwenden und ich würde lieber keine benutzerdefinierten Animationsblöcke verwenden, um den Frame der Ansichten zu ändern.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage