2016-06-11 5 views
0

Ich habe eine UInavigationController in meiner App. Meine Frage ist, wie man den backgroundView erstellt, wenn man einen viewController den Blick auf die aktuelle Szene schiebt. Die Standardeinstellung ist ein schwarzer Bildschirm. Ich möchte etwas erreichen, das Modally über den aktuellen Kontext innerhalb eines UINavigationControllers präsentiert.Ändern Hintergrund beim Drücken in UI Navigation Controller

Antwort

0

Lässt Sie sagen von View Controller A gehen etwas wie wenn man einen Screenshot der Hintergrundansicht eines Rechts auf View-Controller B.

Sie könnten versuchen, bevor Sie B mit Navigation Controller drücken.

Dann übergeben Sie dieses Bild, um Controller B anzuzeigen und es als Hintergrundbild einzurichten. Wenn Sie auch die gleiche Animation wie einen View-Controller modal präsentieren möchten, müssen Sie benutzerdefinierte Navigation Controller-Animation verwenden und einrichten.

Edit: Wenn alles, was Sie tun wollten die gleiche feste Farbe zeigen auf B wie die von A. Setzen Sie einfach die Hintergrundfarbe von B auf die von A und fügen Sie eine benutzerdefinierte Navigation-Controller Animation

Für die Animation , Sie müssen den View Controller als Delegierten des navigationControllers festlegen. Dann müssen Sie die folgende Delegiertenfunktion hinzufügen:

-(id<UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController animationControllerForOperation:(UINavigationControllerOperation)operation fromViewController:(UIViewController *)fromVC toViewController:(UIViewController *)toVC 
     { 
     return [[Slide alloc] init]; 
    } 

Dann geben Sie die Klasse zurück, die Sie erstellen, um die Animation zu implementieren. Sie müssen die Klasse machen Sie mit dem <UIViewControllerAnimatedTransitioning> Protokoll machen entsprechen

Die Klasse haben die folgenden zwei Delegierte Funktionen-

- (NSTimeInterval)transitionDuration:(id <UIViewControllerContextTransitioning>)transitionContext{ 
     return 0.4f; 
} 

- (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext{ 
UIViewController* toController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey]; 
UIViewController* fromController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey]; 
UIView* container = [transitionContext containerView]; 
[container addSubview:toController.view]; 

[UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{ 
     //set frame to be out of screen bounds here 
    } completion:^(BOOL finished) { 
     [fromController.view removeFromSuperview]; 
     [transitionContext completeTransition:finished]; 
    }]; 
} 
+0

Dank zu implementieren, können Sie eine schnelle Version zur Verfügung stellen für Sie antworten? Auch wie man das aufgenommene Bild weitergibt? – user2232305

+0

Richten Sie eine starke UIImage-Eigenschaft in der Header-Datei in Ziel C ein. Wenn Sie den Code für den Push-View-Controller B schreiben, müssen Sie nur schreiben ViewControllerB.image = yourImage; Tut mir leid, ich bin nicht so vertraut mit swift und wird wahrscheinlich am Ende irreführen. Ich habe dir bereits gesagt, wie man es macht, Ziel C, du solltest in der Lage sein, eine Idee zu bekommen und es schnell zu tun. – Rikh