Есть ли способ определить угол наклона телефона в горизонтальном положении? - PullRequest
0 голосов
/ 13 мая 2019

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

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

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

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];

Захват в любом случае не должен поворачивать изображение вообще.

Ответы [ 2 ]

1 голос
/ 13 мая 2019
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    if UIDevice.current.orientation.isLandscape {
        print("Landscape")
    } else {
        print("Portrait")
    }
}

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

0 голосов
/ 13 мая 2019

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

...