ios cambiar - ¿Cómo desarrollar o migrar aplicaciones para la resolución de pantalla del iPhone 5?




carpetas safari (25)

La nueva pantalla del iPhone 5 tiene una nueva relación de aspecto y una nueva resolución (640 x 1136 píxeles).

¿Qué se requiere para desarrollar aplicaciones nuevas o de transición ya existentes al nuevo tamaño de pantalla?

¿Qué debemos tener en cuenta para hacer que las aplicaciones sean "universales" tanto para las pantallas antiguas como para la nueva relación de aspecto de pantalla panorámica?


Answers

En primer lugar, cree dos xibs y adjunte todos los delegados, la clase principal al xib y luego u puede poner en esta condición mencionada a continuación en su archivo appdelegate.m en

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

    if ([[UIScreen mainScreen] bounds].size.height == 568)
        {

        self.ViewController = [[ViewController alloc] initWithNibName:@"ViewControlleriphone5" bundle:nil];
        }

        else
        {
             self.ViewController = [[ViewController alloc] initWithNibName:@"ViewControlleriphone4" bundle:nil];

        }

Puede usarlo en cualquier lugar del programa, dependiendo de sus requisitos, incluso en sus clases de ViewController . Lo más importante es que ha creado dos archivos xib separados para el iphone 4(320*480) and iphone 5(320*568)


Agregué la nueva imagen de lanzamiento predeterminada y (al revisar otras respuestas de SE ...) me aseguré de que mis guiones gráficos se auto-dimensionaran y subvistas, pero la retina de 4 pulgadas aún estaba en formato de buzón.

Luego me di cuenta de que mi lista de información tenía una línea de pedido para "Lanzar imagen" configurada en "Predeterminado.png", que por lo tanto eliminé y mágicamente ya no aparecía el buzón. Esperemos que eso le salve a otra persona la misma locura que soporté.


Según yo, la mejor manera de lidiar con estos problemas y evitar el par de condiciones requeridas para verificar la altura del dispositivo, es usar el marco relativo para las vistas o cualquier elemento de la interfaz de usuario que esté agregando a su vista, por ejemplo: si está agregando algún elemento de la interfaz de usuario que desee debe estar en la parte inferior de la vista o justo encima de la barra de pestañas, entonces debe tomar el origen y con respecto a la altura de su vista o con respecto a la barra de pestañas (si está presente) y también tenemos propiedades de cambio de tamaño automático. Espero que esto funcione para tí


Supongo que no funcionará en todos los casos, pero en mi proyecto particular me evitó la duplicación de archivos NIB:

En algún lugar en common.h puede hacer estas definiciones basadas en la altura de la pantalla:

#define HEIGHT_IPHONE_5 568
#define IS_IPHONE   ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
#define IS_IPHONE_5 ([[UIScreen mainScreen] bounds ].size.height == HEIGHT_IPHONE_5)

En su controlador base:

- (void)viewDidLoad
{
    [super viewDidLoad];
    if (IS_IPHONE_5) {
        CGRect r = self.view.frame;
        r.size.height = HEIGHT_IPHONE_5 - 20;
        self.view.frame = r;
    }
    // now the view is stretched properly and not pushed to the bottom
    // it is pushed to the top instead...

    // other code goes here...
}

Peter, deberías echarle un vistazo a Canappi, hace todo eso por ti, todo lo que tienes que hacer es especificar el diseño como tal:

button mySubmitButton 'Sumbit' (100,100,100,30 + 0,88,0,0) { ... }

Desde allí, Canappi generará el código objetivo-c correcto que detecta el dispositivo en el que se ejecuta la aplicación y utilizará:

(100,100,100,30) for iPhone4
(100,**188**,100,30) for iPhone 5

Canappi funciona como Interface Builder y Story Board combinados, excepto que está en forma de texto. Si ya tiene archivos XIB, puede convertirlos para que no tenga que volver a crear la IU completa desde cero.


Usted podría agregar este código:

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone){
        if ([[UIScreen mainScreen] respondsToSelector: @selector(scale)]) {
            CGSize result = [[UIScreen mainScreen] bounds].size;
            CGFloat scale = [UIScreen mainScreen].scale;
            result = CGSizeMake(result.width * scale, result.height * scale);

            if(result.height == 960) {
                NSLog(@"iPhone 4 Resolution");
            }
            if(result.height == 1136) {
              NSLog(@"iPhone 5 Resolution");
            }
        }
        else{
            NSLog(@"Standard Resolution");
        }
    }

Usando xCode 5, seleccione "Migrar al Catálogo de Activos" en Proyecto> General.

Luego use "Mostrar en el buscador" para encontrar su imagen de lanzamiento, puede modificarla para que sea de 640x1136, luego arrastrarla al catálogo de activos como se muestra en la imagen a continuación.

Asegúrese de que la sección iOS7 y iOS6 R4 tenga una imagen de 640x1136. La próxima vez que inicie la aplicación, las barras negras desaparecerán y su aplicación utilizará una pantalla de 4 pulgadas


Es fácil migrar iPhone5 y iPhone4 a través de XIB .........

UIViewController *viewController3;
if ([[UIScreen mainScreen] bounds].size.height == 568)
{
    UIViewController *viewController3 = [[[mainscreenview alloc] initWithNibName:@"iphone5screen" bundle:nil] autorelease];               
}    
else
{
     UIViewController *viewController3 = [[[mainscreenview alloc] initWithNibName:@"iphone4screen" bundle:nil] autorelease];
}

Nunca enfrenté un problema de este tipo con ningún dispositivo, ya que he tenido una base de código para todos, sin valores codificados. Lo que hago es tener la imagen de tamaño máximo como recurso en lugar de una para cada dispositivo. Por ejemplo, tendría uno para la visualización de la retina y lo mostraría como apropiado para que se vea como se ve en cada dispositivo. Llegando a decidir el marco del botón, por ejemplo, en tiempo de ejecución. Para esto uso el valor% de la vista de patente, por ejemplo, si quiero que el ancho sea la mitad de la vista principal, tome el 50% de la principal y lo mismo se aplica para la altura y el centro.

Con esto ni siquiera necesito los xibs.


A veces (para aplicaciones de pre-guión gráfico), si el diseño va a ser lo suficientemente diferente, vale la pena especificar un xib diferente según el dispositivo (consulte esta pregunta : deberá modificar el código para tratar con el iPhone 5) en viewController Inicial, ya que ninguna cantidad de twiddling con autorizing masks funcionará si necesita gráficos diferentes.

-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

    NSString *myNibName;
    if ([MyDeviceInfoUtility isiPhone5]) myNibName = @"MyNibIP5";
    else myNibName = @"MyNib";

    if ((self = [super initWithNibName:myNibName bundle:nibBundleOrNil])) {


...

Esto es útil para aplicaciones que están dirigidas a versiones anteriores de iOS.


here resuelvo este problema. Solo agregue ~ 568h @ sufijo 2x a las imágenes y ~ 568h a xib's. No necesita más verificaciones en tiempo de ejecución o cambios de código.


Puede usar la función Auto Layout y crear el diseño con la resolución de pantalla del iPhone 5 y funcionará para los dispositivos de 4 "y 3.5", pero en este caso debe tener un conocimiento suficiente del administrador de diseño.


Hay un pequeño problema al probar tanto en el dispositivo iOS como en el simulador de iOS. Parece que el simulador (XCode 6.0.1) proporciona valores cambiados para el ancho y el alto en [[UIScreen mainScreen] bounds].size según la orientación del dispositivo.

Entonces, esto podría ser un problema al determinar el tamaño de pantalla física correcto. Este código ayuda también a diferenciar todas las generaciones de modelos de iPhone 2014:

  • iphone 4s
  • iPhone5 (y iPhone5s)
  • iPhone6 ​​(y iPhone6 ​​+)

También se puede cambiar fácilmente para hacer la distinción entre, por ejemplo, iPhone6 ​​de iPhone6 ​​+.

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

    CGSize iOSDeviceScreenSize = [[UIScreen mainScreen] bounds].size;

    if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone)
    {
        if (iOSDeviceScreenSize.width > 568 || // for iOS devices
            iOSDeviceScreenSize.height > 568) // for iOS simulator
        {   // iPhone 6 and iPhone 6+

            // Instantiate a new storyboard object using the storyboard file named Storyboard_iPhone6
            storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone6" bundle:nil];

            NSLog(@"loaded iPhone6 Storyboard");
        }
        else if (iOSDeviceScreenSize.width == 568 || // for iOS devices
                 iOSDeviceScreenSize.height == 568) // for iOS simulator
        {   // iPhone 5 and iPod Touch 5th generation: 4 inch screen (diagonally measured)

            // Instantiate a new storyboard object using the storyboard file named Storyboard_iPhone5
            storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone5" bundle:nil];

            NSLog(@"loaded iPhone5 Storyboard");
        }
        else
        {   // iPhone 3GS, 4, and 4S and iPod Touch 3rd and 4th generation: 3.5 inch screen (diagonally measured)

                // Instantiate a new storyboard object using the storyboard file named Storyboard_iPhone4
            storyboard = [UIStoryboard story    boardWithName:@"MainStoryboard_iPhone" bundle:nil];

                NSLog(@"loaded iPhone4 Storyboard");
        }
    }
    else if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad)
    {   // The iOS device = iPad

        storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPadnew" bundle:nil];

        NSLog(@"loaded iPad Storyboard");
    }

    // rest my code
}

Primero muestra esta imagen. En esa imagen, se muestra una advertencia para el soporte de Retina 4, así que haga clic en esta advertencia y haga clic en Agregar para que la pantalla de bienvenida de Retina 4 se agregue automáticamente a su proyecto.

y después de usar este código:

if([[UIScreen mainScreen] bounds].size.height == 568)
    {
        // For iphone 5
    }
    else
    {
        // For iphone 4 or less
    }

  1. Descarga e instala la última versión de Xcode .
  2. Configure un archivo de pantalla de inicio para su aplicación (en la pestaña general de la configuración de destino). Así es como puede usar el tamaño completo de cualquier pantalla, incluidos los tamaños de vista dividida de iPad en iOS 9.
  3. Pruebe su aplicación y, con suerte, no haga nada más, ya que todo debería funcionar de forma mágica si ha configurado correctamente las máscaras de cambio de tamaño o ha utilizado Diseño automático.
  4. Si no lo hizo, ajuste sus diseños de vista, preferiblemente con Diseño automático.
  5. Si hay algo que tienes que hacer específicamente para las pantallas más grandes, entonces parece que tienes que verificar la altura de los [[UIScreen mainScreen] bounds] ya que no parece haber una API específica para eso. A partir de iOS 8 también hay clases de tamaño que resumen los tamaños de pantalla en forma regular o compacta vertical y horizontalmente, y se recomienda la forma de adaptar su interfaz de usuario.

Punto de aviso: en el nuevo Xcode debe agregar este archivo de imagen Predeterminado [email protected] a los activos


Yo sugeriría usar Autoresizing Mask en sus aplicaciones de acuerdo con su interfaz de interfaz de usuario, ya que ahorra muchos problemas y es mejor que crear una interfaz de usuario diferente para las pantallas de iPhone 4 y 5.


Pruebe el siguiente método en una clase de singleton:

-(NSString *)typeOfDevice
    {
        if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
        {
            CGSize result = [[UIScreen mainScreen] bounds].size;
            if(result.height == 480)
            {
                return @"Iphone";
            }
            if(result.height == 568)
            {
                return @"Iphone 5";
            }
        }
        else{
            return @"Ipad";;
        }


        return @"Iphone";
    }

En lugar de usar un conjunto de condicionales, puede cambiar el tamaño de su vista automáticamente usando el tamaño de la pantalla.

int h = [[UIScreen mainScreen] bounds].size.height;
int w = [[UIScreen mainScreen] bounds].size.width;
self.imageView.frame = CGRectMake(20, 80, (h-200), (w-100));

En mi caso, quiero una vista que llene el espacio entre algunos campos de entrada en la parte superior y algunos botones en la parte inferior, por lo que se fijó en la esquina superior izquierda y la variable inferior derecha en función del tamaño de la pantalla. Mi aplicación llena la vista de imagen con la foto tomada por la cámara, así que quiero todo el espacio que pueda obtener.


Aquí puede encontrar un buen tutorial (para MonoTouch, pero también puede usar la información para proyectos que no sean MonoTouch):
http://redth.info/get-your-monotouch-apps-ready-for-iphone-5-ios-6-today/

  1. Cree una nueva imagen para su pantalla de inicio / predeterminada ( 640 x 1136 píxeles ) con el nombre " [email protected] "

  2. En el simulador de iOS , vaya al menú Hardware -> Dispositivo y seleccione " iPhone (Retina de 4 pulgadas) "

  3. Crear otras imágenes, por ejemplo, imágenes de fondo.

  4. Detecta iPhone 5 para cargar tus nuevas imágenes:
public static bool IsTall
{
    get {
        return UIDevice.currentDevice.userInterfaceIdiom
                    == UIUserInterfaceIdiomPhone
                && UIScreen.mainScreen.bounds.size.height
                    * UIScreen.mainScreen.scale >= 1136;
    }
}
private static string tallMagic = "[email protected]";
public static UIImage FromBundle16x9(string path)
{
    //adopt the [email protected] naming convention
    if(IsTall())
    {
        var imagePath = Path.GetDirectoryName(path.ToString());
        var imageFile = Path.GetFileNameWithoutExtension(path.ToString());
        var imageExt = Path.GetExtension(path.ToString());
        imageFile = imageFile + tallMagic + imageExt;
        return UIImage.FromFile(Path.Combine(imagePath,imageFile));
    }
    else
    {
        return UIImage.FromBundle(path.ToString());
    }
}

Si tiene una aplicación desarrollada para iPhone 4S o anterior, se ejecutará en formato buzón en el iPhone 5.

Para adaptar su aplicación a la nueva pantalla más alta, lo primero que debe hacer es cambiar la imagen de inicio a: [email protected] Su tamaño debe ser de 1136x640 (HxW). Sí, tener la imagen predeterminada en el nuevo tamaño de pantalla es la clave para que tu aplicación tome toda la pantalla del nuevo iPhone 5 .

(Tenga en cuenta que la convención de nombres solo funciona para la imagen predeterminada. Nombrar otra imagen "[email protected]" no hará que se cargue en lugar de "[email protected]". Si necesita cargar diferentes imágenes para diferentes tamaños de pantalla, tendrás que hacerlo mediante programación.)

Si tienes mucha suerte, podría ser eso ... pero con toda probabilidad, tendrás que dar unos pasos más.

  • Asegúrese de que sus Xibs / Vistas utilicen el diseño automático para redimensionarse ellos mismos.
  • Utilice resortes y puntales para cambiar el tamaño de las vistas.
  • Si esto no es lo suficientemente bueno para su aplicación, diseñe su xib / storyboard para un tamaño de pantalla específico y reposicione programáticamente para el otro.

En el caso extremo (cuando ninguno de los anteriores es suficiente), diseñe los dos Xibs y cargue el apropiado en el controlador de vista.

Para detectar el tamaño de la pantalla:

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
    CGSize result = [[UIScreen mainScreen] bounds].size;
    if(result.height == 480)
    {
        // iPhone Classic
    }
    if(result.height == 568)
    {
        // iPhone 5
    }
}

En un archivo constants.h puede agregar estas instrucciones de definición:

 #define IS_IPAD UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad 
 #define IS_IPHONE UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone
 #define IS_WIDESCREEN (fabs((double)[[UIScreen mainScreen] bounds].size.height - (double)568) < DBL_EPSILON) 
 #define IS_IPHONE_5 (!IS_IPAD && IS_WIDESCREEN)

Puede usar esta definición para calcular si está utilizando el iPhone 5 según el tamaño de la pantalla:

#define IS_IPHONE_5 ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )

luego use una simple sentencia if :

    if (IS_IPHONE_5) {

    // What ever changes
    }

Puedes verificar manualmente el tamaño de la pantalla para determinar en qué dispositivo estás:

#define DEVICE_IS_IPHONE5 ([[UIScreen mainScreen] bounds].size.height == 568)

float height = DEVICE_IS_IPHONE5?568:480;
if (height == 568) {
    // 4"

} else {

    // 3"

}

Todas las aplicaciones continuarán funcionando en la pantalla extendida verticalmente de lo que pude ver en la presentación de hoy. Se colocarán en forma de buzón o, básicamente, los 88 puntos adicionales de altura serían simplemente negros.

Si solo piensa admitir iOS 6+, entonces definitivamente considere usar el diseño automático. Elimina todo el manejo de diseño fijo y, en cambio, utiliza restricciones para diseñar cosas. Nada será difícil de codificar, y tu vida se volverá mucho más simple.

Sin embargo, si tiene que admitir iOS más antiguos, entonces realmente depende de su aplicación. La mayoría de las aplicaciones que usan una barra de navegación estándar y / o la barra de pestañas podrían simplemente expandir el contenido en el medio para usar esos puntos adicionales. Establezca la máscara de tamaño automático del contenido del centro para expandir en ambas direcciones.

view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

Sin embargo, si las aplicaciones usan un diseño de píxeles perfectos para mostrar contenido, funciona de manera ideal para las vistas de tablas, entonces lo mejor sería volver a imaginar el contenido para que pueda adaptarse a diferentes alturas.

Si eso no es una posibilidad, entonces la única opción restante es tener dos IU (pre iPhone 5 y iPhone 5).

Si eso suena feo, entonces podrías ir con el modelo de buzón predeterminado en el que los puntos / píxeles adicionales solo aparecen en negro.

Editar

Para que sus aplicaciones funcionen con el iPhone 5, debe agregar una versión retina de la imagen del iniciador. Debería llamarse [email protected] . Y tiene que ser de calidad de retina, no hay compatibilidad con versiones anteriores aquí :)

También puede seleccionar esta imagen desde Xcode. Vaya al objetivo y, en la sección Resumen, busque Imágenes de lanzamiento. La imagen debe tener un tamaño de 640x1136 píxeles. Aquí hay una captura de pantalla de dónde encontrarla, si eso ayuda.





ios iphone screen iphone-5