2011-05-25 8 views
6

¿Hay alguna manera de detectar que su aplicación de iPhone nos está ejecutando 2x/1x en un iPad?detectar iPad 2x botón para la aplicación de iPhone

Necesito poder detectar la diferencia en puntos por pulgada para mi aplicación.

+0

posible duplicado de [detección de la aplicación iPhone que se ejecuta en iPad en modo compatibilidad] (http://stackoverflow.com/questions/3242620/detecting-iphone-app-running-on-ipad-in-comp atibility-mode) –

+1

@Josh, está relacionado, pero no es un duplicado. Reconocer que su aplicación de iPhone se está ejecutando en un iPad, y detectar si se está ejecutando en 1x o 2x, son dos cosas diferentes. Buen enlace; seguramente querrá saber si una escala 2x está asociada a una pantalla Retina iPhone4 o un modo iPad 2x, antes de actuar en consecuencia. – magma

Respuesta

0

Usted puede detectar el cambio mediante el registro para la notificación _UIClassicApplicationWillChangeZoomNotificationName y luego manejar el cambio de escala utilizando más o menos el método descrito por @magma en su respuesta. _UIClassicApplicationWillChangeZoomNotificationName le dirá cuándo se ha usado el botón "2x"/"1x" para cambiar la escala.

6

comprobar la propiedad scale:

[[UIScreen mainScreen] scale] 

He aquí una función práctica:

+(BOOL) screenIs2xResolution { 
    return 2.0 == [MyDeviceClass mainScreenScale]; 
} 

+(CGFloat) mainScreenScale { 
    CGFloat scale = 1.0; 
    UIScreen* screen = [UIScreen mainScreen]; 
    if ([UIScreen instancesRespondToSelector:@selector(scale)]) { 
    scale = [screen scale]; 
    } 
    return scale; 
} 

Créditos: http://www.markj.net/iphone-4-2x-graphics-scale-ipad/

Ver también: http://struct.ca/2010/high-res-graphics-in-cocos2d/

+0

esto no cambia. – madmik3

+0

@ madmik3 lo hace. Varios desarrolladores admiten gráficos de alta resolución en aplicaciones de iPhone que se ejecutan a 2x en un iPad. – magma

+0

He agregado este código a mi aplicación y probado. Siempre informa una escala de 1.0. Entonces no está funcionando en mi caso. – madmik3

2

Puesto que no puede registrarse para _UIClassicApplicationWillChangeZoomNotificationName, que parece ser una constante interna, lo que hice es:

Registro para cualquier notificación:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeZoom:) name:nil object:nil]; 

Y a continuación, comprobar los valores de acuerdo:

- (void)changeZoom:(NSNotification*)notification 
{ 
    if ([[notification name] isEqualToString:@"_UIClassicApplicationWillChangeZoomNotificationName"]) 
    { 
     NSLog(@"Zoom changed to %@", [[[notification userInfo] objectForKey:@"_UIClassicIsZoomedUserInfoKeyName"] boolValue] == 0 ? @"1x" : @"2x"); 
    } 
} 
Cuestiones relacionadas