Odhalit iPhone orientace obrazovky

hlasů
5

Já jsem chtěl zjistit orientaci iPhone v 45 stupňových krocích. V ideálním případě bych chtěl mít možnost získat úhel orientace podél libovolné osy.

Detekce musím udělat, je podobný tomu, jak Trism pro iPhone bliká šíp směrem k aktuální spodní polohy obrazovky při změně orientace.

Mám něco kódované nahoru, ale opravdu nechápu, jak Akcelerometr čtení pracovat a mohl použít pošťouchnutí správným směrem. Můj současný kód zaznamenává aktuální úhel, ale iv případě, že telefon je plochá získám hodnoty různé divoce několikrát za sekundu.

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

Ochutnat ze záznamu, zatímco telefon je plochá:

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
Položena 16/06/2009 v 06:13
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
4

Myslím, že váš problém je, že používáte intproměnné, když budete chtít float.

Myslím, že accelerationXi Y by měla být instance proměnné a tak:

accelerationX = acceleration.x * kfilteringFactor + accelerationX * (1.0 - kfilteringFactor);
accelerationY = acceleration.y * kfilteringFactor + accelerationY * (1.0 - kfilteringFactor);

Měli byste dát víc, co jste hledali.

Odpovězeno 16/06/2009 v 07:56
zdroj uživatelem

hlasů
3

Důvodem je, že používáte lokální proměnné, zatímco oni by neměli být lokální.

Zkuste provést následující kroky:

Deklarovat proměnné instance:

@interface YourViewControllerClass: UIViewController {
    float accelerationX, accelerationY;
}

...

other declarations

Aktualizujte proměnné v akcelerometru delegáta:

 accelerationX = acceleration.x * kfilteringFactor + accelerationX * (1.0 - kfilteringFactor);
 accelerationY = acceleration.y * kfilteringFactor + accelerationY * (1.0 - kfilteringFactor);

To by mělo dát přesnější výsledky bez náhlých skoků.

Odpovězeno 16/06/2009 v 13:26
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more