ios - pasar - mi iphone cambio de color la pantalla




¿Cómo desarrollar o migrar aplicaciones para la resolución de pantalla del iPhone 5? (20)

  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.

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?


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.


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());
    }
}

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.


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)

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];
}

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
}

La verificación de bounds con 568 fallará en modo horizontal. El iPhone 5 se inicia solo en modo vertical, pero si desea admitir las rotaciones, la "comprobación" del iPhone 5 también tendrá que manejar este escenario.

Aquí hay una macro que maneja el estado de orientación:

#define IS_IPHONE_5 (CGSizeEqualToSize([[UIScreen mainScreen] preferredMode].size, CGSizeMake(640, 1136)))

El uso de la llamada 'preferredMode' es de otra publicación que leí hace unas horas, por lo que no se me ocurrió esta idea.


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.


Para determinar si su aplicación puede ser compatible con iPhone 5 Retina, use esto: (Esto podría ser más sólido para devolver el tipo de pantalla, 4S Retina, etc., pero como está escrito a continuación, solo regresa si el iPhone es compatible con iOS5 Retina como un Si o no)

En un archivo ".h" común agregue:

BOOL IS_IPHONE5_RETINA(void);

En un archivo ".m" común agregue:

BOOL IS_IPHONE5_RETINA(void) {
    BOOL isiPhone5Retina = NO;
    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
        if ([UIScreen mainScreen].scale == 2.0f) {
            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, 4s Retina Resolution");
            }
            if(result.height == 1136){
                //NSLog(@"iPhone 5 Resolution");
                isiPhone5Retina = YES;
            }
        } else {
            //NSLog(@"iPhone Standard Resolution");
        }
    }
    return isiPhone5Retina;
}

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
    }

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";
    }

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.


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"

}

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í


Si necesita convertir una aplicación ya existente a universal, debe seleccionar el archivo xib correspondiente-> Mostrar Utilidades-> Mostrar inspector de tamaño.

En el inspector de tamaño, puede ver el tamaño automático, al usar esta herramienta puede convertir la aplicación iOS existente.


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


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");
        }
    }

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.


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.





iphone-5