2013-08-29 2 views
0

есть ли логика, чтобы определить, перевернул ли пользователь свой телефон, как со стороны батареи, так и на экран, и наоборот в горизонтальной плоскости? Я попытался получить исходные значения, чтобы определить, находится ли устройство в горизонтальном положении на обеих сторонах, но как обнаружить все движение, может ли кто-нибудь указать мне в правильном направлении.Как обнаружить флип iPhone?

ответ

4

Если вы посмотрите на UIDevice class reference, вы увидите перемычку ориентации. Два из его значений: UIDeviceOrientationFaceDown и UIDeviceOrientationFaceUp. При этом все, что вам нужно сделать, это зарегистрировать наблюдателя в уведомлении UIDeviceOrientationDidChangeNotification, а по телефону вы можете проверить текущую ориентацию устройств и обработать это соответственно.

[[NSNotificationCenter defaultCenter] addObserverForName:UIDeviceOrientationDidChangeNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) { 
    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; 
    if (orientation == UIDeviceOrientationFaceDown) { 
     // device facing down 
    }else if (orientation == UIDeviceOrientationFaceUp) { 
     // device facing up 
    }else{ 
     // facing some other direction 
    } 
}]; 

Для начала генерации уведомлений устройства необходимо соблюдать следующие правила.

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 

Если вы хотите получить более подробную информацию об ориентации устройства, вам необходимо использовать структуру ядра Motion, чтобы получить данные гироскопов напрямую. При этом вы можете отслеживать точное направление тока, с которым устройство сталкивается в трехмерном пространстве.

_motionManager = [CMMotionManager new]; 
NSOperationQueue *queue = [NSOperationQueue new]; 

[_motionManager setGyroUpdateInterval:1.0/20.0]; 
[_motionManager startGyroUpdatesToQueue:queue withHandler:^(CMGyroData *gyroData, NSError *error) { 
    NSLog(@"%@",gyroData); 
}]; 
+0

спасибо за ответ, я достиг этого обнаружения, хотя исходные значения ранее и я говорил об этом в моем вопросе тоже проблема обнаружить все движение листать от isFaceUp к isFaceDown – carelesslyChoosy

+0

Окей, который должен быть более точным но я до сих пор не вижу, как он обнаружит движение, он очень точно определяет две конечные позиции, но я не уверен, как я узнаю, что мой пользователь перевернул его устройство. – carelesslyChoosy

+0

проблема не в точности, чтобы определить конечную позицию, но логика для обнаружения всего этого движения – carelesslyChoosy

Смежные вопросы