如何检查设备上是否存在陀螺仪?

时间:2011-06-02 18:04:15

标签: iphone ios gyroscope

我想知道我的设备(iPhone,iPad,iPod,iOS设备)是否配有陀螺仪吗?

3 个答案:

答案 0 :(得分:13)

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

}

另请参阅我的此博客条目,了解您可以检查iOS设备中的不同功能 http://www.makebetterthings.com/blogs/iphone/check-ios-device-capabilities/

答案 1 :(得分:3)

CoreMotion的运动管理器类具有内置属性,用于检查硬件可用性。 Saurabh的方法要求您每次发布带陀螺仪的新设备(iPad 2等)时更新您的应用程序。以下是使用Apple记录的属性检查陀螺仪可用性的示例代码:

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

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

有关详细信息,请参阅the documentation

答案 2 :(得分:1)

我相信来自@Saurabh和@Andrew Theis的答案只是部分正确。

这是一个更完整的解决方案:

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

this StackOverflow answer中定义了SYSTEM_VERSION_LESS_THAN()