2011-06-02 87 views

回答

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/

+0

使用#ifdef有什麼優勢? – jonsibley 2012-01-07 22:35:31

+1

@jonsibley CMMotionManager僅適用於iPhone OS 4 ..如果我們嘗試在早期的操作系統上使用它,它將無法編譯 – Saurabh 2012-01-08 09:25:52

+0

明白了,謝謝。 – jonsibley 2012-03-24 13:10:28

3

CoreMotion的運動經理類內置了用於檢查硬件可用性屬性檢查不同的能力。 Saurabh的方法會要求您在每次發佈帶有陀螺儀的新設備(iPad 2等)時更新您的應用程序。下面是使用蘋果的記錄屬性檢查陀螺儀可用性的示例代碼:

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

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

更多信息,請參見the documentation

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 
} 

SYSTEM_VERSION_LESS_THAN()this StackOverflow answer定義。

+0

I通過查看這個頁面上的所有答案,我完全感到困惑。 @jonsibley「gyroAvailable」方法只適用於IOS4 +嗎? – ShayanK 2012-04-23 11:32:07