2012-02-21 16 views
7

Por lo que algunos iPad en el futuro probablemente tengan Retina Display. Y es muy probable que Apple vaya al stick to the @2x paradigm. He estado esperando esto por un tiempo y por eso ya tengo ilustraciones de @ 2x para iPad en mis aplicaciones; algunos ya están en la tienda de aplicaciones.iPad 3 Retina Display, @ 2x imágenes y aplicaciones que ya están en la tienda

Mi pregunta es esta: ¿Tendré que volver a compilar y/o volver a enviar aplicaciones para usar dichas ilustraciones cuando se publique este iPad mítico para que aproveche estos archivos? ¿O es algo cocido en el propio sistema operativo y debería usarlo automágicamente?

(Desde lo mismo ocurrió antes, lo que ocurrió w/aplicaciones liberados bajo los pre-iPhone-4 SDK que pasó a tener la obra ¿verdad? ¿Se acaba de trabajar?)

+1

No creo que ninguna aplicación anterior al iPhone-4 tenga la ilustración correcta ... – Thilo

+0

Efectivamente, ¿alguien sabe con certeza si es correcta? –

Respuesta

6

Experimenté con una retina IPAD hoy, y esto es lo que parece suceder:

  • Si una aplicación se compila con un tiempo razonablemente reciente de Xcode (probablemente 4.2+), @ se utilizan imágenes 2x, al igual que cuando salió el iPhone 4.
  • Si se compiló una aplicación con Xcode 3, las imágenes @ 2x son no utilizadas, incluso si están presentes. (Por ejemplo, en una aplicación híbrida iphone-4-capaz.)

(Tenemos un número de-3 XCode proyectos basados, muchos de los cuales son híbridos de la retina iPhone. Ninguno de ellos utiliza los gráficos @ 2x en el nuevo ipad. Cuando compilé un proyecto de prueba tanto en Xcode 3 como en Xcode 4, la compilación 4 usó el recurso retina y la compilación 3 no. Otros experimentos demostraron que la diferencia se compila en el ejecutable, por lo que no es solo una info.plist pellizque como esperaba.)

[eta .: mi hipótesis es que la compilación con un SDK anterior lo vincula a una versión diferente de UIKit en tiempo de ejecución. Las diferencias extrañas en el comportamiento a medida que actualizo nuestro código parecen confirmarlo. Si alguien conoce el encantamiento para saberlo con certeza, coméntelo.]

[editado para agregar, una vez más: también hay alguna diferencia de plumín. Un proyecto antiguo abierto en xcode 4 no usaría los gráficos @ 2x hasta que volviera a guardar mi MainWindow.nib; luego lo hizo todo, sin otros cambios. . Sospecho una propiedad oculta del objeto UIWindow]

+0

No es que sean buenas noticias, pero estoy teniendo la misma experiencia, al menos la parte sobre las imágenes @ 2x no se usa al compilar con Xcode3. Todavía no he probado Xcode 4. Gracias por publicar, al menos sé que no estoy loco. – hyperspasm

+0

Guau, esa es una respuesta detallada. ¡Gracias! – DOOManiac

1

Asumo esto sólo funcionará en el dispositivo. Tengo entendido que [UIImage imageNamed:] busca el @ 2x si el dispositivo lo admite. Parece que está integrado en iOS. Esto es solo una suposición.

2

Lo que he encontrado en la construcción con XCode 4.2 (iOS SDK 5.0) que se ejecuta en Snow Leopard es la siguiente:

Las imágenes cargadas mediante programación utilizando [UIImage imagedNamed: ] en su código cargará correctamente retina @ 2x imágenes en la retina iPad.

Las imágenes especificadas en botones y vistas en los archivos XIB de Interface Builder generalmente NO cargan adecuadamente las imágenes retina @ 2x.

La solución que descubrí era forzar UIImage para almacenar en caché cada una de las imágenes que se hace referencia en su XI ter utilizando [UIImage imagedNamed:] llamadas en su controlador de vista de (o apropiado) initWithNibName: (NSString *) paquete: (NSBundle *) . El método programático hace una buena carga @ 2x y el sistema lo almacena en caché, lo que el mecanismo de carga XIB termina haciendo referencia, produciendo imágenes de retina. Por ejemplo:

// The designated initializer. Override to perform setup that is required before the view is loaded. 
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { 
     // Doing this to precache proper retina versions, because older xcode nibs aren't loading them correctly on retina iPads with XCode 4.2 builds 

     [UIImage imageNamed:@"my_button.png"]; 
     [UIImage imageNamed:@"my_other_button.png"]; 
    } 
    return self; 
} 

Supongo que construir con XCode 4.3 (SDK 5.1) funciona correctamente con XIB, pero no estaba preparado para actualizar a Lion solo para usar esa versión de XCode.

+0

¡Gracias! Experimenté lo siguiente: si no especifica el nombre de la imagen como este "[email protected]", y Xcode busca el archivo @ 2x, encontrará el archivo, pero no lo mostrará correctamente. No se dimensionará como se espera. Sin embargo, si carga su imagen como esta "[email protected]", se muestra correctamente. Debería presentar un informe de error, pero actualmente estoy demasiado agotado después de todo este experimento. – tmighty

Cuestiones relacionadas