2011-06-02 12 views

Respuesta

13
- (BOOL) isGyroscopeAvailable 
{ 
#ifdef __IPHONE_4_0 
    CMMotionManager *motionManager = [[CMMotionManager alloc] init]; 
    BOOL gyroAvailable = motionManager.gyroAvailable; 
    [motionManager release]; 
    return gyroAvailable; 
#else 
    return NO; 
#endif 

} 

Véase también mi esta entrada de blog para saber que se puede comprobar si hay diferentes capacidades de los dispositivos IOS http://www.makebetterthings.com/blogs/iphone/check-ios-device-capabilities/

+0

¿Qué ventaja tiene usar #ifdef aquí? – jonsibley

+1

@jonsibley CMMotionManager solo está disponible en iPhone os 4 .. si tratamos de usarlo en el sistema operativo anterior no compilará – Saurabh

+0

Entendido, gracias. – jonsibley

3

clase gestor de movimiento de CoreMotion tiene una propiedad construida en la comprobación de disponibilidad de hardware. El método de Saurabh requeriría que actualizaras tu aplicación cada vez que se lanzara un nuevo dispositivo con un giroscopio (iPad 2, etc.). Aquí está el código de ejemplo utilizando la propiedad documentada de Apple para comprobar disponibilidad giroscopio:

CMMotionManager *motionManager = [[[CMMotionManager alloc] init] autorelease]; 

if (motionManager.gyroAvailable) 
{ 
    motionManager.deviceMotionUpdateInterval = 1.0/60.0; 
    [motionManager startDeviceMotionUpdates]; 
} 

Ver the documentation para obtener más información.

1

Creo que las respuestas de @Saurabh y @Andrew Theis son parcialmente correctas.

esta es una solución más completa:

- (BOOL) isGyroscopeAvailable 
{ 
// If the iOS Deployment Target is greater than 4.0, then you 
// can access the gyroAvailable property of CMMotionManager 
#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_4_0 
    CMMotionManager *motionManager = [[CMMotionManager alloc] init]; 
    BOOL gyroAvailable = motionManager.gyroAvailable; 
    [motionManager release]; 
    return gyroAvailable; 
// Otherwise, if you are supporting iOS versions < 4.0, you must check the 
// the device's iOS version number before accessing gyroAvailable 
#else 
    // Gyro wasn't available on any devices with iOS < 4.0 
    if (SYSTEM_VERSION_LESS_THAN(@"4.0")) 
     return NO; 
    else 
    { 
     CMMotionManager *motionManager = [[CMMotionManager alloc] init]; 
     BOOL gyroAvailable = motionManager.gyroAvailable; 
     [motionManager release]; 
     return gyroAvailable; 
    } 
#endif 
} 

Cuando el SYSTEM_VERSION_LESS_THAN() se define en this StackOverflow answer.

+0

I Estoy completamente confundido mirando todas estas respuestas en esta página. @jonsibley ¿Es cierto que el método "gyroAvailable" solo está disponible en IOS4 +? – ShayanK

Cuestiones relacionadas