for - xcode 4.5 cómo elegir guiones gráficos en el lanzamiento
xcode for windows (5)
Actualmente, la única forma de comprobar si está utilizando el iPhone 5 son los [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 será falso. (Porque la pantalla se verá en forma de buzón si no tiene la imagen de inicio)
Para configurar el guión gráfico en tu versión de iPhone 5, es posible que quieras echarle un vistazo a esta pregunta
Estoy tratando de hacer que mi aplicación funcione tanto con iPhone 5 como con iPhone 4 / 4s. Probé el "AutoLayout", pero parece que no funciona para mi aplicación, también he leído que no es compatible con iOS 5. AutoLayout falla específicamente en un controlador de vista que tiene un UIScrollview y un UIPicker que se vuelve a clasificar según el código. Tener dos Storyboards uno para 4 pulgadas y uno para 3.5 pulgadas parece ser el camino a seguir.
Los dos métodos de Storyboard parecen ser la solución para mí. Entonces esto me deja con dos preguntas;
¿Dónde debería ir el código para detectar si es un 4 / 4s / 5? Asumiría en la appDelegate.m en el método didFinishLaunchingWithOptions
¿Cómo cambio el "Guión gráfico principal"?
El primero, el trabajo muy bueno es simple y claro, pero para todos si quieres integrar dispositivos de multiplicar mira aquí:
Cree un proyecto para iPhone5 con Storyboard llamado iPhone5_Storyboard.
Cierre la aplicación y dentro de una carpeta clone la historia principal llamada iPhone5_Storyboard y cambie el nombre a iPhone4_Storyboard. No se olvide de cambiar el tamaño y reordenar todos los objetos dentro de xcode interface builder.
Opcional si desea una versión Universal, dentro de xcode use Agregar archivo y agregue el nuevo objetivo EMPTY Storyboard para iPad, ope un iphone5_storyboard use CMD + A y cópielo todo y péguelo en Empty Story para iPad (necesita reordenar el objeto, pero está todo vinculado y trabajando).
En Xcode, bajo TARGET, establezca la aplicación universal y ajuste en MainStoryboard, usted iPhone5_Storyboard, bajo la configuración iPad Story Story iPad_Storyboard.
Ahora GRACIAS A UNA PRIMERA RESPUESTA DE ESTE POST tenemos que implementar todas las historias diferentes 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
Lo que he estado haciendo recientemente es agregar una declaración definida 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 de bool es de Detect iphone 5 4 "screen .
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á usando guiones gráficos , y solo desea cambiar el guión gráfico de los valores predeterminados con los que comenzó su proyecto para los dispositivos con iPhone 5. Si está empezando desde cero con un proyecto existente que no sea 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 empiezo un proyecto ahora diseño la versión para iPhone 3.5 "en guiones gráficos (si estoy usando guiones gráficos), cuando termino con ese diseño voy a mis archivos de proyecto y encuentro el guión gráfico. Como un guión gráfico es solo una Archivo de diseño XML, puedo tomar ese archivo y cargarlo en mi editor de texto favorito y cambiar dos etiquetas.
Convierte iPhone a iPad
- En la parte superior del archivo, encuentre
targetRuntime="iOS.CocoaTouch
" - Cambiar a
targetRuntime="iOS.CocoaTouch.iPad"
- En la parte inferior del archivo, puede encontrar este
<simulatedScreenMetrics key="destination" type="retina4"/>
- Cambie esto a
<simulatedScreenMetrics key="destination"/>
El último elemento solo aparecerá si el archivo del guión gráfico principal está configurado para la pantalla de iPhone de 4 ".
Lo que es importante aquí es que si solo agrega el iPhone 5 a un proyecto existente, solo necesita el primer cheque para anular el predeterminado y cargar su archivo especial del guión gráfico. Esto literalmente me salvó de tener que diseñar manualmente todos los objetos en el código para iPhone 5.
Me inspiré en fields.cage answer 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];
}
}
Esta es una gran pregunta.
Lo que debes hacer es,
Seleccione su guión gráfico de 4 / 4s actual, vaya a Archivo, duplique, y luego dele un nombre específico para iPhone 5. Asegúrate de que Target y el nombre de tu aplicación estén marcados.
A continuación, debe seleccionar las escenas en su guión gráfico y en el Inspector de atributos, cambie el tamaño a Retina 4 Pantalla completa. Esto le permite reorganizar todo para esta pantalla.
Finalmente, en la aplicación didFinishLaunchingWithOptions pega el siguiente código con el nombre del guión gráfico que proporcionó para su guión 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 sabe cómo hacer el paso 1, haga lo siguiente.
Vaya al directorio del proyecto y copie y pegue
MainStoryboard.storyboard
y cambie el nombre del nuevo guión gráfico para decirMainStoryboard5.storyboard
.Agregue este nuevo guión gráfico a
MainStoryboard5.storyboard
en proyecto (en Xcode) haciendo clic con el botón derecho en Proyecto y haciendo clic enAdd Files to ....
Ahora tenemos dos storyboards en xcode.
Propina
Es posible que deba usar ''Producto> Limpiar'' para que esto funcione después de haber hecho todo lo anterior.