Просто интересно, могу ли я проверить, есть ли на устройстве (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/
person
Saurabh
schedule
02.06.2011
Какое преимущество здесь дает использование #ifdef?
- person codeperson; 08.01.2012
@jonsibley CMMotionManager доступен только на iPhone OS 4 .. если мы попытаемся использовать его в более ранних версиях, он не будет компилироваться
- person Saurabh; 08.01.2012
Я считаю, что __IPHONE_4_0 - это просто определенная константа. Кажется, что правильный способ сделать это - использовать
__IPHONE_OS_VERSION_MIN_REQUIRED >= 40000
(согласно этому вопросу StackOverflow: stackoverflow .com / questions / 3955331 / if-iphone-4-0-on-ipad).
- person codeperson; 24.03.2012
Класс менеджера движения CoreMotion имеет встроенное свойство для проверки доступности оборудования. Метод Саураба требует, чтобы вы обновляли приложение каждый раз, когда выпускается новое устройство с гироскопом (iPad 2 и т. Д.). Вот пример кода, использующего задокументированное Apple свойство для проверки доступности гироскопа:
CMMotionManager *motionManager = [[[CMMotionManager alloc] init] autorelease];
if (motionManager.gyroAvailable)
{
motionManager.deviceMotionUpdateInterval = 1.0/60.0;
[motionManager startDeviceMotionUpdates];
}
См. документацию для получения дополнительной информации.
person
Andrew Theis
schedule
17.06.2011
Я считаю, что ответы @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.
person
codeperson
schedule
24.03.2012
Я совершенно сбит с толку, глядя на все эти ответы на этой странице. @jonsibley Правда ли, что метод gyroAvailable доступен только в IOS4 +?
- person ShayanK; 23.04.2012