xcode 4.5 cómo elegir guiones gráficos en el lanzamiento


Tratando de hacer que mi aplicación funcione con iPhone 5 y iPhone 4/4s. Probé el "diseño automático", pero no parece funcionar para mi aplicación también leí que no es compatible con iOS 5. El diseño automático falla específicamente en un controlador de vista que tiene un UIScrollView y un UIPicker que se redimensiona en código. Tener dos Storyboards uno para 4 pulgadas y uno para 3.5 pulgadas parece el camino a seguir.

Los dos aproch Storyboard parecen ser la solución para mí. Así que esto me deja con dos preguntas;

  1. ¿Dónde debe el código para detectar, entonces, si es un 4/4s/5? Supongo que en el appDelegate.m en el método didFinishLaunchingWithOptions

  2. ¿Cómo cambio el "Guion gráfico principal"?

Author: Xaphann, 2012-09-21

5 answers

Esta es una gran pregunta.

Lo que tienes que hacer es,

  1. Seleccione su storyboard actual 4/4s, vaya a Archivo, duplicar, luego déle un nombre específico de iPhone 5. Asegúrese de que el destino y el nombre de su aplicación estén marcados.

  2. A continuación tienes que seleccionar las escenas en tu storyboard y en el Inspector de Atributos cambiar el tamaño a Retina 4 Full Screen. Esto le permite reorganizar todo para esto Mostrar.

  3. Finalmente en la aplicación didFinishLaunchingWithOptions pegue el siguiente código con el nombre del guion gráfico que dio para su guion gráfico de 4 pulgadas.

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone){
        UIStoryboard *storyBoard;
    
        CGSize result = [[UIScreen mainScreen] bounds].size;
        CGFloat scale = [UIScreen mainScreen].scale;
        result = CGSizeMake(result.width * scale, result.height * scale);
    
        if(result.height == 1136){
            storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone_5" bundle:nil];
            UIViewController *initViewController = [storyBoard instantiateInitialViewController];
            [self.window setRootViewController:initViewController];
        }
    }
    
    return YES;
    }
    

Si alguien no entiende cómo hacer el paso 1, haga lo siguiente.

  1. Vaya al directorio del proyecto y copie y pegue el MainStoryboard.storyboard y cambie el nombre del nuevo guion gráfico para decir MainStoryboard5.storyboard.

  2. Agregue este nuevo storyboard MainStoryboard5.storyboard en proyecto (en Xcode) haciendo clic derecho en Proyecto y clic Add Files to ....

  3. Ahora tenemos dos guiones gráficos en xcode.

Tip

Es posible que tenga que usar 'Producto > Limpio' para que esto funcione después de haber hecho todo lo anterior.

 61
Author: fields.cage,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-13 09:35:01

Actualmente la única manera es comprobar si estás usando el iPhone 5 es el [UIScreen mainScreen] bounds] y [[UIScreen mainScreen] scale].

BOOL isIphone5 = (([[UIDevice currentDevice] userInterfaceIdiom] 
== UIUserInterfaceIdiomPhone) && (([UIScreen mainScreen].bounds.size.height * 
[[UIScreen mainScreen] scale]) >= 1136));

Esto solo funciona si al menos ha agregado una imagen de inicio [email protected] a su aplicación. De lo contrario esto siempre devolverá false. (Porque la pantalla será letterboxed si usted no tiene la imagen de lanzamiento)

Para establecer el guion gráfico en su iPhone 5 versión es posible que desee echar un vistazo a esta pregunta

 7
Author: Leon Lucardie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:31:46

Me inspiré en los campos.respuesta de la jaula y lo adaptó a mi código, funciona bien. ¡Gracias!!

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone){
        UIStoryboard *storyBoard;

        CGSize result = [[UIScreen mainScreen] bounds].size;
        CGFloat scale = [UIScreen mainScreen].scale;
        result = CGSizeMake(result.width * scale, result.height * scale);

        if(result.height == 1136){


             self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController_iPhone5" bundle:nil] autorelease];

        }
        else
        {
             self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil] autorelease];
        }
    }
 2
Author: Tanos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-10 17:23:28

Lo que he estado haciendo recientemente es agregar una instrucción define en cualquier clase que necesite para verificar el dispositivo. Esto también se puede hacer en cualquier archivo de encabezado global.

#define IS_IPHONE (!IS_IPAD)
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPhone)

La prueba bool es de Detectar iphone 5 4" pantalla.

bool isiPhone5 = CGSizeEqualToSize([[UIScreen mainScreen] preferredMode].size,CGSizeMake(640, 1136));
if (isiPhone5) {
        // Setup For iPhone 5 Screen Size
    UIStoryboard *storyBoard;

    storyBoard = [UIStoryboard storyboardWithName:@"MyiPhone5StoryboardName" bundle:nil];
    UIViewController *initViewController = [storyBoard instantiateInitialViewController];
    [self.window setRootViewController:initViewController];
}

Esto funciona muy bien si ya está utilizando storyboards, y solo desea cambiar el storyboard de los valores predeterminados con los que comenzó su proyecto para dispositivos iPhone 5. Si usted está comenzando desde cero con un existente proyecto no Storyboard puede hacerlo de esta manera.

#define IS_IPHONE (!IS_IPAD)
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPhone)

bool isiPhone5 = CGSizeEqualToSize([[UIScreen mainScreen] preferredMode].size,CGSizeMake(640, 1136));
if (isiPhone5) {
        // Load iPhone 5 Storyboard
    UIStoryboard *storyBoard;

    storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone5" bundle:nil];
    UIViewController *initViewController = [storyBoard instantiateInitialViewController];
    [self.window setRootViewController:initViewController]; 
}

else if (IS_IPAD) {
        // Load IPAD StoryBoard
    UIStoryboard *storyBoard;

    storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPad" bundle:nil];
    UIViewController *initViewController = [storyBoard instantiateInitialViewController];
    [self.window setRootViewController:initViewController]; 
}

else {
        // Load the iPhone 3.5" storyboard
    UIStoryboard *storyBoard;

    storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
    UIViewController *initViewController = [storyBoard instantiateInitialViewController];
    [self.window setRootViewController:initViewController]; 
}

Cuando comienzo un proyecto ahora diseño la versión de iPhone 3.5" en storyboards (Si estoy usando storyboards), luego cuando termine con ese diseño entro en mis archivos de proyecto y encuentro el archivo de storyboard. Dado que un archivo de storyboard es solo un archivo de diseño XML, puedo tomar ese archivo y cargarlo en mi editor de texto favorito y cambiar dos etiquetas.

Convertir iPhone a iPad

  1. En la parte superior del archivo buscar targetRuntime="iOS.CocoaTouch"
  2. Cambiar a targetRuntime="iOS.CocoaTouch.iPad"
  3. Ad la parte inferior del archivo puede encontrar esto <simulatedScreenMetrics key="destination" type="retina4"/>
  4. Cambie esto a <simulatedScreenMetrics key="destination"/>

El último elemento solo aparecerá si el archivo de storyboard principal está configurado para la pantalla de iPhone de 4".

Lo que es importante aquí es que si solo agrega iPhone 5 a un proyecto existente, solo necesita la primera comprobación para anular el valor predeterminado y cargar su archivo de guion gráfico especial. Este literalmente me salvó de tener que diseñar manualmente todos los objetos en código para iPhone 5.

 1
Author: Nelson Brian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:31:46

El primero Funciona muy bien es simple y claro, pero para todos si quieres integrar multiply devices mira aquí:

  1. Crear un proyecto para iPhone5 con un guion gráfico llamado iPhone5_Storyboard.

  2. Cerrar aplicación y dentro de una carpeta clonar el Principal Historia llamada iPhone5_Storyboard y cambiar el nombre en iPhone4_Storyboard no se olvide de cambiar el tamaño y reordenar todos los objetos dentro de xcode interface builder.

  3. Opcional si desea una versión Universal, dentro de xcode use Agregar archivo y la adición de nuevo objetivo VACÍO Storyboard para iPad, ope un iphone5_storyboard use CMD + A y copie todo y pegue en el vacío Historia para iPad (necesidad de reordenar el objeto, pero está todo vinculado y trabajando).

  4. En Xcode en TARGET set Universal App y configuración en MainStoryboard, iPhone5_Storyboard, en iPad Main Story setting iPad_Storyboard.

  5. Ahora GRACIAS A UNA PRIMERA RESPUESTA DE ESTE POST tenemos que implementar todos los diferentes Historia usando este código dentro de un AppDelegate.m:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone){
        UIStoryboard *storyBoard;

        CGSize result = [[UIScreen mainScreen] bounds].size;
        CGFloat scale = [UIScreen mainScreen].scale;
        result = CGSizeMake(result.width *scale, result.height *scale);

//----------------HERE WE SETUP FOR IPHONE4/4s/iPod----------------------

        if(result.height == 960){
            storyBoard = [UIStoryboard storyboardWithName:@"iPhone4_Storyboard" bundle:nil];
            UIViewController *initViewController = [storyBoard instantiateInitialViewController];
            [self.window setRootViewController:initViewController];
        }

//----------------HERE WE SETUP FOR IPHONE3/3s/iPod----------------------

        if(result.height == 480){
            storyBoard = [UIStoryboard storyboardWithName:@"iPhone4_Storyboard" bundle:nil];
            UIViewController *initViewController = [storyBoard instantiateInitialViewController];
            [self.window setRootViewController:initViewController];
        }
    }

        return YES;
 }

Eso es todo ahora tenemos una aplicación universal para iPhone 3/3Gs/4/4s / 5 iPod (AllGen) iPad 1/2/3/4 Mini y Retina

Gracias chicos

 0
Author: BlackSheep,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-29 16:29:15