Descartar iOS y animación personalizada del controlador de vista actual

Tengo un controlador de vista que presento con el siguiente código de objetivo c:

CATransition *animation=[CATransition animation];
animation.delegate=self;
animation.duration=0.3;
animation.type=kCATransitionMoveIn;
animation.subtype=kCATransitionFromRight;

[self presentViewController:reader animated:NO completion:nil];
[reader.view.layer addAnimation:animation forKey:@"animation"];

y descartando con código similar dentro de un método delegado

CATransition *animation=[CATransition animation];
animation.delegate=self;
animation.duration=0.3;
animation.type=kCATransitionMoveIn;
animation.subtype=kCATransitionFromLeft;

[self dismissViewControllerAnimated:NO completion:nil];
[self.view.layer addAnimation:animation forKey:@"animation"];

Sin embargo, hay un problema: a diferencia del uso de un controlador de navegación en el que ve una vista deslizarse hacia otra vista; aquí la vista anterior simplemente desaparece instantáneamente, por lo que la nueva vista pasa a una vista en blanco.

¿Cómo soluciono este problema? Necesito este código para trabajar en IOS 6,7 y 8 y me gustaría que se parezca a la animación horizontal que ves al ir y venir entre las vistas que están dentro de los controladores de navegación.

Editar: la solución que acepté tiene un error con iOS 6, si puedo encontrar una solución que la corrija, editaré esta publicación.

Edición 2: lo encontré. Parece que ya que estoy presentando un controlador de vista zBar necesito usar este código

zbarController.wantsFullScreenLayout=NO;

después de configurar la cámara OverlayView.

Respuestas a la pregunta(1)

Su respuesta a la pregunta