2010-04-28 12 views
8

Tengo una aplicación para iPad que usa toda la pantalla (es decir, UIStatusBarHidden se establece como verdadero en el archivo Info.plist). Los marcos de la ventana principal y de la vista principal están configurados en (0, 0, 768, 1024). La vista principal tiene activado multitouch.¿Pueden los puntos Touch/iPad Touch estar equivocados debido a la calibración?

El controlador de vista tiene el código para manejar toques:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    for (UITouch *touch in touches) { 
     CGPoint location = [touch locationInView:nil]; 
     NSLog(@"touchesMoved at location %@", NSStringFromCGPoint(location)); 
    } 
} 

Cuando ejecuto la aplicación en el simulador, funciona más o menos como se esperaba. Cuando muevo el mouse de un borde de la pantalla al otro, los valores reportados de X van de 0 a 767. Los valores de Y reportados van de 20 a 1023. (Es un known issue que el simulador no informa toca en el top 20 . píxeles de la pantalla, incluso cuando no hay una barra de estado)

Esto es lo raro: cuando ejecuto la aplicación en un iPad real, los valores X ir de 0 a 767 como se esperaba, pero reportaron valores Y van de -6 a 1017, no de 0 a 1023 como era de esperar.

El hecho de que parezca funcionar correctamente en el simulador me lleva a sospechar que las pantallas táctiles de los dispositivos reales no están perfectamente calibradas, y el mío simplemente está informando valores Y que están a seis píxeles de distancia. ¿Alguien puede verificar que este es el caso? De lo contrario, ¿hay algo más que pueda explicar que los valores Y estén a seis píxeles de distancia de lo que espero?

(En unos pocos días, debería haber una segunda iPad, por lo que puede probar esto con otro dispositivo y comparar los resultados.)

Respuesta

1

Haciendo un poco de prueba rápida Noté la misma cosa. Empecé un proyecto básico de vista basado en nada cambió, pero el siguiente código:

(iPadTestsAppDelegate)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  
    [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide]; 

    // Override point for customization after app launch  
    viewController.view.multipleTouchEnabled = YES; 
    viewController.view.userInteractionEnabled = YES; 

    [window addSubview:viewController.view]; 
    [window makeKeyAndVisible]; 

    return YES; 
} 

(iPadTestsViewController)

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    for (UITouch *touch in touches) { 
     CGPoint location = [touch locationInView:nil]; 
     NSLog(@"touchesMoved at location %@", NSStringFromCGPoint(location)); 
    } 
} 

Cuando toco los bordes de la pantalla que informes negativos números en el eje x y nunca golpea 0 en el eje y. Agregar algunas variables para hacer un seguimiento de max y min me da como las esquinas de nuestro iPad: {-5, 2}, {758, 2}, {-5, 1019}, {758, 1019}.

+0

¿Qué tal un iPhone, podría ejecutar la misma prueba en una y ver cómo le va? – jamone

+0

Gracias por verificar. –

+0

jamone: en realidad no tengo un iPhone a la mano en este momento. Lo siento. – MrHen

1

Estoy consiguiendo valores diferentes para diferentes UIInterfaceOrientations

UIInterfaceOrientation ori = [UIApplication sharedApplication].statusBarOrientation; 
CGPoint point = [touch locationInView:self]; 

Teniendo en cuenta que, yo supongo que esto es un problema de software, no una cuestión de dispositivo.

Cuestiones relacionadas