Как программно изменить ориентацию устройства и направление вращения экрана должно быть по часовой стрелке - PullRequest
0 голосов
/ 30 апреля 2018

Я хочу принудительно поворачивать экран при нажатии кнопок. У меня есть две кнопки, одна для поворота экрана в по часовой стрелке , а другая для поворота в против часовой стрелки .

Мой код 1) [[UIDevice currentDevice] setValue:[NSNumber numberWithInt:UIInterfaceOrientationLandscapeLeft] forKey:@"orientation"] Для вращения против часовой стрелки и его работает нормально.

2) [[UIDevice currentDevice] setValue:[NSNumber numberWithInt:UIDeviceOrientationLandscapeRight] forKey:@"orientation"] Для вращения по часовой стрелке. Этот код также поворачивает экран против часовой стрелки. Я исключаю поворот по часовой стрелке.

Пожалуйста, помогите мне исправить это.

1 Ответ

0 голосов
/ 30 апреля 2018

Каждая ориентация в iOS имеет необработанное значение.

  1. портрет = 1
  2. PortraitUpsideDown = 2
  3. landscapeLeft = 3
  4. landscapeRight = 4

Вы можете изменить ориентацию на основе этих значений.

Вот как я это сделал в swift

  1. Поворот по часовой стрелке:

    @IBAction func rotateClockwise(_ sender: Any) {
    
    
    let orientation = UIDevice.current.orientation
    print("Current state:",orientation.rawValue)
    var newOrientation: Int {
        switch orientation.rawValue {
        case 1:
            return 3
        case 2:
            return 4
        case 3:
            return 2
        case 4:
            return 1
        default:
            return 1
        }
    }
    
    
    UIDevice.current.setValue(newOrientation, forKey: "orientation")
    

    }

  2. Повернуть против часовой стрелки:

    @IBAction func rotateAntiClockwise(_ sender: Any) {
    
    let orientation = UIDevice.current.orientation
    print("Current state:",orientation.rawValue)
    var newOrientation: Int {
        switch orientation.rawValue {
        case 1:
            return 4
        case 2:
            return 3
        case 3:
            return 1
        case 4:
            return 2
        default:
            return 1
        }
    }
    
    
    UIDevice.current.setValue(newOrientation, forKey: "orientation")
    }
    

Примечание

Обязательно выберите все ориентации в качестве цели - общие

Если это не сработает, добавьте следующий код для просмотра класса контроллера

override var supportedInterfaceOrientations: UIInterfaceOrientationMask { get { return .all } }
...