Chcę wykryć orientację iPhone'a z krokiem 45 stopni. Idealnie chciałbym móc uzyskać kąt orientacji wzdłuż dowolnej osi.Wykryj orientację ekranu iPhone'a
Wykrywanie, które muszę wykonać, jest podobne do tego, jak w przypadku wersji Trism iPhone zmienia strzałkę w kierunku aktualnej dolnej pozycji ekranu po zmianie orientacji.
Mam coś zakodowanego, ale tak naprawdę nie rozumiem, jak działają odczyty z przyspieszeniomierza i czy można użyć przesunięcia we właściwym kierunku. Mój aktualny kod rejestruje bieżący kąt, ale nawet gdy telefon jest płaski, odczyty zmieniają się dziko kilka razy na sekundę.
- (void) checkOrientation:(UIAccelerometer*)accelerometer didAccelerate:(UIAcceleration*)acceleration
{
int accelerationX = acceleration.x * kfilteringFactor + accelerationX * (1.0 - kfilteringFactor);
int accelerationY = acceleration.y * kfilteringFactor + accelerationY * (1.0 - kfilteringFactor);
float currentRawReading = (atan2(accelerationY, accelerationX)) * 180/M_PI;
NSLog(@"Angle: %f",currentRawReading);
}
próbki z dziennika podczas gdy telefon jest płaski:
2009-06-16 17:29:07.987 [373:207] Angle: 0.162292
2009-06-16 17:29:07.994 [373:207] Angle: 179.838547
2009-06-16 17:29:08.014 [373:207] Angle: 179.836182
2009-06-16 17:29:08.032 [373:207] Angle: -90.000000
2009-06-16 17:29:08.046 [373:207] Angle: 179.890900
2009-06-16 17:29:08.059 [373:207] Angle: -90.000000
2009-06-16 17:29:08.074 [373:207] Angle: 179.917908
2009-06-16 17:29:08.088 [373:207] Angle: -179.950424
2009-06-16 17:29:08.106 [373:207] Angle: 90.000000
2009-06-16 17:29:08.119 [373:207] Angle: 90.000000
2009-06-16 17:29:08.134 [373:207] Angle: -179.720245
Dziękuję za odpowiedź, zmieniłem kod, aby używać intats z ints, ale nadal otrzymuję wynik szalenie zmiennych wartości, które są obliczane, gdy urządzenie leży płasko. – Simon
Dodano kilka linii z dziennika do pytania. – Simon
Ah, pominął twój komentarz po raz pierwszy w odniesieniu do zmiennych instancji, wygląda na to, że może być rozwiązaniem, skontaktuje się z Tobą. – Simon