Я нашел решение для моего вышеупомянутого вопроса, и я заявляю его здесь, потому что это может быть полезно для кого-то.
Если вам нужно сохранить положение, соответствующее конкретной 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))
})
}
}
}