2010-04-28 8 views
8

Ich habe eine iPad-Anwendung, die den gesamten Bildschirm verwendet (das heißt, UIStatusBarHidden ist in der Info.plist-Datei wahr). Die Rahmen des Hauptfensters und der Hauptansicht sind auf (0, 0, 768, 1024) eingestellt. In der Hauptansicht ist Multitouch aktiviert.Können iPad/iPhone Touch Points aufgrund von Kalibrierung falsch sein?

Die View-Controller haben diesen Code berührt zu handhaben:

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

Wenn ich die app im Simulator laufen, es ist ziemlich viel wie erwartet funktioniert. Wenn ich die Maus von einer Kante des Bildschirms zur anderen bewege, gehen die angegebenen X-Werte von 0 bis 767. Die gemeldeten Y-Werte gehen von 20 bis 1023. (Es ist ein known issue, dass der Simulator Berührungen in den oberen 20 nicht meldet . Pixel des Bildschirms, auch wenn es keine Statusleiste)

Hier ist, was seltsam ist: wenn ich die App auf einem tatsächlichen iPad laufen, da die X-Werte gehen von 0 bis 767 erwartet, aber berichten, Y-Werte gehen von -6 bis 1017, nicht 0 bis 1023, wie ich es erwarten würde.

Die Tatsache, dass es scheint, auf dem Simulator richtig zu arbeiten, führt zu dem Verdacht, dass die Touchscreens der realen Geräte nicht perfekt kalibriert sind, und meins meldet einfach Y-Werte, die sechs Pixel aus sind. Kann jemand bestätigen, dass dies der Fall ist? Gibt es sonst noch etwas, das für die Y-Werte verantwortlich sein könnte, die sechs Pixel von dem entfernt sind, was ich erwarte?

(In einigen Tagen sollte ich ein zweites iPad haben, ich kann das so testen, mit einem anderen Gerät und vergleichen Sie die Ergebnisse.)

Antwort

1

einige schnelle Tests Doing ich die gleiche Sache bemerkt. Ich begann geändert, um eine Grundansicht basiertes Projekt mit nichts als den folgenden Code:

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

Wenn ich die Ränder des Bildschirms berühren berichtet negativ Zahlen auf der X-Achse und trifft niemals 0 auf der Y-Achse. Das Hinzufügen einiger Variablen, um Max und Min zu verfolgen, gibt mir diese als Ecken unseres iPads: {-5, 2}, {758, 2}, {-5, 1019}, {758, 1019}.

+0

Wie wäre es mit einem iPhone, könnten Sie den gleichen Test an einem durchführen und sehen, wie es geht? – jamone

+0

Danke für die Überprüfung. –

+0

jamone: Ich habe im Moment kein iPhone zur Hand. Es tut uns leid. – MrHen

1

Ich erhalte verschiedene Werte für verschiedene UIInterfaceOrientations

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

Da würde ich davon ausgehen, das ein Software-Problem, kein Gerät Problem.