PDA

Ver la versión completa : [Programación] Ayuda con pantallas modales en Xcode y Objective C



cdrman
09/01/2016, 20:02
Holas!!!

Tengo una duda que seguro os parecerá tonta, pero he mirado varios tutoriales y no hay forma que funcione.

Necesito crear una pantalla modal al estilo de la siguiente imagen.

45792

Estoy utilizando el StoryBoard para crear mis pantallas y demás pero siempre me encuentro con este problema. He visto apps que hacen lo mismo y dejan la pantalla de segundo plano con un efecto de Blur.

He conseguido, a través de código realizar algo parecido, consiguiendo este efecto:

45793

No obstante creo que debe haber de algún modo para hacerlo de forma mucho más simple ya que he tenido que picar algo de código y siendo una tarea más o menos común deduzco que no lo hago de la mejor forma posible.

Muchas gracias!!!!

cdrman
11/01/2016, 12:29
Up!!!!

swapd0
11/01/2016, 13:19
¿Pero que quieres que salga con el efecto del blur o sin el? Yo para mostrar ventanas modales uso el metodo runModal y ya esta, nada de tocar tanto codigo.

cdrman
11/01/2016, 13:25
Lo del blur me da igual, lo típico es que al mostrar una modal se oscurezca un poco el fondo pero bueno... eso lo hace solo.

No me suena de nada el runModal. Una cosa es un diálogo simple, lo típico para elegir varios opciones, pero lo que quiero es mostrar una ventana modal encima de la mía, nada más. Bueno, si puede ser con algún efecto gráfico actual, pues mejor. Ahora se utiliza mucho el blur.

^MiSaTo^
11/01/2016, 13:32
¿Pero que quieres que salga con el efecto del blur o sin el? Yo para mostrar ventanas modales uso el metodo runModal y ya esta, nada de tocar tanto codigo.

Cómo runModal? O_o Será presentViewController (https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/index.html#//apple_ref/occ/instm/UIViewController/presentViewController:animated:completion:)
Lo que puedes hacer es tener la vista principal de tu VC con alpha (o el efecto de blur, como sea) y dentro de ahí tener otra View con fondo blanco que es donde vas a poner la info. Igual necesitas hacer un screenshot al hacer la transición para que te deje visible lo que hay debajo.

EDIT: Otra cosa, para qué quieres hacer eso en concreto? Porque si es en un iPhone va en contra de las guías de diseño que tengas como blur a los lados y que se vea lo que hay "debajo". el VC tiene que ocupar toda la pantalla. En un iPad si se puede hacer así, es más es uno de los estilos normales de los modales

cdrman
11/01/2016, 13:53
Hola, Misato!!

Pues sí, ya sé que va en contra de las guías de diseño pero el cliente es muy "tikismikis" y dice que lo quiere así..... Yo ya se lo dije que esto no era lo típico.... A ver si le puedo convencer...

Gracias.


Cómo runModal? O_o Será presentViewController (https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/index.html#//apple_ref/occ/instm/UIViewController/presentViewController:animated:completion:)
Lo que puedes hacer es tener la vista principal de tu VC con alpha (o el efecto de blur, como sea) y dentro de ahí tener otra View con fondo blanco que es donde vas a poner la info. Igual necesitas hacer un screenshot al hacer la transición para que te deje visible lo que hay debajo.

EDIT: Otra cosa, para qué quieres hacer eso en concreto? Porque si es en un iPhone va en contra de las guías de diseño que tengas como blur a los lados y que se vea lo que hay "debajo". el VC tiene que ocupar toda la pantalla. En un iPad si se puede hacer así, es más es uno de los estilos normales de los modales

Eskema
11/01/2016, 13:57
No hace falta convencerlo, asi apple no le pasara la review. O se adapta a como son las cosas en ios o se va al carajo xD

A todo el mundo le pasa igual "es que en android lo tengo asi y lo quiero igual en ios", nene que son cosas distintas... yo siempre les digo, si quieres te lo pongo asi pero apple no lo aprobara y tocara cambiarlo, ese cambio te lo cobraré. Y normalmente te despiden y se buscan a otro xDD

^MiSaTo^
11/01/2016, 14:06
Venía a decir lo mismo que Eskema, que es posible que no pase la review de Apple. Supongo que al cliente aunque le digas eso se la pelará.
En caso de que se la pele, lo que tienes que hacer es lo que te he dicho en mi otro mensaje.
Si quiere que por los lados se vea lo que había debajo entonces tienes que hacer un screenshot en la transición seguramente (esto pruebalo porque igual no te hace falta).

PD: Con esto parece que Apple son el diablo y no, hay unas guías de estilo. Son públicas, se las puedes pasar a tu cliente (yo lo he hecho varias veces). Apple pone las reglas porque quiere algo consistente y a mi no me parece mal porque sino no lo sería. En cualquier caso es su Store y son ellos los que deciden qué pasa y qué no. Y creeme, las reviews se hacen A MANO por una persona. No son automáticas y no hay manera de engañarlos (como me ha sugerido algún cliente a mi en su día). Puede que te vean algo así y diga bueno va o puede que sean más estrictos y no te lo pasen.

Android tb tiene guías de estilo ojo, lo que pasa que al no haber un proceso de review no pasa nada si te lo pasas por el forro. Pero en teoría tampoco deberías hacer lo que te diera la gana y deberías seguir eso.

cdrman
12/01/2016, 08:31
Holas!!

Graciass a todos por la ayuda. LE he explicado el tema al cliente que al final ha cedido.... Jejeje.

faraday
12/01/2016, 11:20
Yo he hecho esto en algunas vistas que aparecen tipo aviso por encima de la vista principal.

Simplemente es un ViewController en el Storyboard con "Presentation = Over Full Screen"
Luego en la vista creas una View y dentro sus elementos (que no ocupe toda la vista principal)
En su controlador:

self.view.backgroundColor = [UIColor clearColor];
self.view.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.0];

Desde la Vista que quieras, lanza para que entre:
[self presentViewController:vista_n animated:YES completion:nil];

^MiSaTo^
12/01/2016, 11:21
Yo he hecho esto en algunas vistas que aparecen tipo aviso por encima de la vista principal.

Simplemente es un ViewController en el Storyboard con "Presentation = Over Full Screen"
Luego en la vista creas una View y dentro sus elementos (que no ocupe toda la vista principal)
En su controlador:

self.view.backgroundColor = [UIColor clearColor];
self.view.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.0];

Desde la Vista que quieras, lanza para que entre:
[self presentViewController:vista_n animated:YES completion:nil];

Precisamente esto es lo que me refería yo. Lo único que sepas tú también que eso va en contra de las normas de diseño de Apple ;)

faraday
12/01/2016, 11:25
Si, va en contra del diseño, pero algunos clientes son así.
De momento me han aprobado las Apps donde he utilizado esto, aunque en otras sin este elemento me ha costado mas... (hasta 3 meses :S)

^MiSaTo^
12/01/2016, 11:30
Si, va en contra del diseño, pero algunos clientes son así.
De momento me han aprobado las Apps donde he utilizado esto, aunque en otras sin este elemento me ha costado mas... (hasta 3 meses :S)

Ya se que algunos clientes son así. De momento has tenido suerte :) Ah, y cuidado cuando hagas update que se vuelve a revisar y si ven algo que pasaron por alto te la pueden desaprobar por ello.
Yo no me la juego porque luego la culpa es mía

swapd0
12/01/2016, 11:48
Cómo runModal? O_o Será presentViewController (https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/index.html#//apple_ref/occ/instm/UIViewController/presentViewController:animated:completion:)

Ups, es en IOS, en OSX he usado runModal, de todas formas no recomiendan poner ventanas modales.