Cómo presentar un controller de vista medio modal en la parte superior con transiciones personalizadas iOS 7

¿Cómo voy a presentar un controller de "vista media" en la parte superior del controller de vista principal?

Requisitos: – Presente un segundo controller de vista que se deslice sobre la parte superior del controller de vista principal. – El controller de la segunda vista solo debería mostrar más de la mitad del controller de la vista principal. – El controller de la vista principal debería permanecer visible detrás del controller de la segunda vista (background transparente, que no muestra negro debajo) – El controller de la segunda vista debería animarse con animation similar a la cubierta vertical modal. Transición personalizada iOS 7: el usuario todavía puede interactuar con los botones del controller de vista principal cuando el controller de segunda vista está activo (es decir, el controller de segunda vista no cubre todo el controller de vista principal) r: el segundo controller de vista tiene su propia lógica compleja (no puede ser simple ver) – Storyboards, Segues, solo para iOS 7 – Solo iPhone, no iPad.

Lo he intentado con el controller de vista modal, pero esto no permite la interacción con el controller de vista principal. ¿Puede alguien proporcionar un ejemplo de cómo hacerlo con la transición personalizada de iOS7 u otro método?

Una forma de hacerlo es agregar el controller "medio modal" como un controller de visualización secundaria y animar su vista en su lugar. Para este ejemplo, he creado el controller "semimodal" en el guión gráfico con un marco que es la mitad de la altura de una pantalla de iPhone de 4 ". Puedes utilizar methods más dynamics para tener en count diferentes tamaños de pantalla, pero esto debería comenzar.

@interface ViewController () @property (strong,nonatomic) UIViewController *modal; @end @implementation ViewController - (IBAction)toggleHalfModal:(UIButton *)sender { if (self.childViewControllers.count == 0) { self.modal = [self.storyboard instantiateViewControllerWithIdentifier:@"HalfModal"]; [self addChildViewController:self.modal]; self.modal.view.frame = CGRectMake(0, 568, 320, 284); [self.view addSubview:self.modal.view]; [UIView animateWithDuration:1 animations:^{ self.modal.view.frame = CGRectMake(0, 284, 320, 284);; } completion:^(BOOL finished) { [self.modal didMoveToParentViewController:self]; }]; }else{ [UIView animateWithDuration:1 animations:^{ self.modal.view.frame = CGRectMake(0, 568, 320, 284); } completion:^(BOOL finished) { [self.modal.view removeFromSuperview]; [self.modal removeFromParentViewController]; self.modal = nil; }]; } }