Есть ли способ определить угол наклона телефона в горизонтальном положении?

Есть ли способ получить текущий угол наклона телефона, даже если телефон находится в портретной блокировке и пытается сделать снимок, удерживая его в положении для правой (альбомной) или левой руки (альбомной)?

Всякий раз, когда я снимаю изображение с правой стороны (удерживая кнопку «Домой» справа), я получаю его правильно, но всякий раз, когда я снимаю изображение с левой стороны, я получаю перевернутое изображение (изображение повернуто на 180 градусов). Как решить эту проблему?

Я пробовал это, но бесполезно, потому что ориентация всегда будет портретной

UIDeviceOrientation orientation=[[UIDevice currentDevice] orientation];

     // Do Orientation operations
     if (orientation == UIDeviceOrientationLandscapeRight)
     {
         MYLog(@"LandRight");
         rotation = [NSValue valueWithCGAffineTransform:CGAffineTransformMakeRotation(90 * (M_PI/180))];
     }
     else if(orientation == UIDeviceOrientationLandscapeLeft){
         MYLog(@"LandLeft");
         rotation = [NSValue valueWithCGAffineTransform:CGAffineTransformMakeRotation(-90 * (M_PI/180))];
     }
     else if(orientation == UIDeviceOrientationPortrait){
         MYLog(@"porttttt");
         rotation = [NSValue valueWithCGAffineTransform:CGAffineTransformMakeRotation(0 * (M_PI/180))];
     }
     else if(orientation == UIDeviceOrientationPortraitUpsideDown)
     {
         MYLog(@"portupdown");
         rotation = [NSValue valueWithCGAffineTransform:CGAffineTransformMakeRotation(1 * (M_PI/180))];
     }

     else if(orientation == UIDeviceOrientationFaceUp)
     {
         MYLog(@"faceup");
         rotation = [NSValue valueWithCGAffineTransform:CGAffineTransformMakeRotation(-90 * (M_PI/180))];
     }
     [transform setValue:rotation forKey:@"inputTransform"];
     enhancedImage = [transform outputImage];

Захват больше не должен вращать изображение.


person Naveen Kumar    schedule 13.05.2019    source источник


Ответы (2)


override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    if UIDevice.current.orientation.isLandscape {
        print("Landscape")
    } else {
        print("Portrait")
    }
}

надеюсь, что это поможет вам

person Developer1205    schedule 13.05.2019

Вы можете использовать библиотеку CoreMotion с некоторой логикой, определяющей ориентацию из необработанных событий гироскопа. https://developer.apple.com/documentation/coremotion Вот пример приложения от Apple. : https://developer.apple.com/library/archive/samplecode/MotionGraphs/Introduction/Intro.html

person Ariel    schedule 13.05.2019