Избегайте поворота одного вида в viewcontroller с изменением ориентации - PullRequest
0 голосов
/ 28 октября 2019

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

Мне нравится Приложение Adobe Draw

Ответы [ 2 ]

0 голосов
/ 05 ноября 2019

Я нашел решение для моего вышеупомянутого вопроса, и я заявляю его здесь, потому что это может быть полезно для кого-то.

Если вам нужно сохранить положение, соответствующее конкретной view, внутри viewcontroller при изменении ориентации устройства, мы должны повернуть этот вид в обратном направлении с той же скоростью. В iPad продолжительность вращения составляет 0.4s, а в iPhone - 0.3s

Пример кода:

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {

    var timeDuration: TimeInterval = 0.4 //for iPads
    if DeviceHardware.deviceIsPhone() {
        timeDuration = 0.3 //for iPhones
    }

    if UIDevice.current.orientation.isLandscape {

        if UIDevice.current.orientation == .landscapeLeft{
            UIView.animate(withDuration: timeDuration, animations: {
                let degrees : Double = 0; //the value in degrees
                self.relevantView!.transform = CGAffineTransform(rotationAngle: CGFloat(degrees * .pi/180))

            })
        }else{
            UIView.animate(withDuration: timeDuration, animations: {
                let degrees : Double = 180; //the value in degrees
                self.relevantView!.transform = CGAffineTransform(rotationAngle: CGFloat(degrees * .pi/180))

            })
        }

    } else {

        if UIDevice.current.orientation == .portraitUpsideDown{
            UIView.animate(withDuration: timeDuration, animations: {
                let degrees : Double = -90; //the value in degrees
                self.relevantView!.transform = CGAffineTransform(rotationAngle: CGFloat(degrees * .pi/180))

            })
        }else{
            UIView.animate(withDuration: timeDuration, animations: {
                let degrees : Double = 90; //the value in degrees
                self.relevantView!.transform = CGAffineTransform(rotationAngle: CGFloat(degrees * .pi/180))

            })
        }
    }
}
0 голосов
/ 28 октября 2019

Вам необходимо установить ориентацию устройства. Вы можете использовать функцию ниже для установки ориентации.

func lockOrientation(_ orientation: UIInterfaceOrientationMask, andRotateTo rotateOrientation:UIInterfaceOrientation) {
    self.lockOrientation(orientation)
    UIDevice.current.setValue(rotateOrientation.rawValue, forKey: "orientation")
} 

Как использовать:

lockOrientation(UIInterfaceOrientationMask.portrait, andRotateTo: UIInterfaceOrientation.portrait)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...