как я могу проверить, присутствует ли гироскоп на устройстве?
просто интересно, могу ли я проверить, имеет ли устройство (iPhone, iPad, iPod, т. е. устройства iOS) гироскоп ?
3 ответов
- (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/
класс менеджера движения CoreMotion имеет свойство, встроенное для проверки доступности оборудования. Метод Saurabh потребует от вас обновлять приложение каждый раз, когда выпускается новое устройство с гироскопом (iPad 2 и т. д.). Вот пример кода, использующего свойство Apple documented для проверки наличия гироскопа:
CMMotionManager *motionManager = [[[CMMotionManager alloc] init] autorelease];
if (motionManager.gyroAvailable)
{
motionManager.deviceMotionUpdateInterval = 1.0/60.0;
[motionManager startDeviceMotionUpdates];
}
посмотреть документация для получения дополнительной информации.
Я считаю, что ответы от @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()
определена в этот ответ StackOverflow.