我的应用程序处于完全横向模式但是从相册中挑选图像时,我不得不添加纵向模式。我只想在选择图像时使用纵向模式。现在它表现得很奇怪,当手机处于横向模式时没有方向锁定和选择图像时,图像选择器显示为一半。右半部分是黑色,左边是景观中的图像选择器(所以是的,这看起来很奇怪)。这是我的设置:
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
return .all
}
在viewDidLoad中的ViewController中(我需要在每个ViewController中添加它...):
let value = UIInterfaceOrientation.landscapeLeft.rawValue
UIDevice.current.setValue(value, forKey: "orientation")
private func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
return UIInterfaceOrientationMask.landscapeLeft
}
open override var shouldAutorotate: Bool {
get {
return false
}
}
我已经查看了质疑这个问题的人的答案。我无法让它工作:(
答案 0 :(得分:1)
我有一段时间遇到过类似的问题。如果我理解你的问题是正确的,那么除非出现照片选择器,否则您希望应用程序保持横向模式。这是你要做的:
进入AppDelegate并添加此静态变量:
static var canRotate = false {
didSet{
UIDevice.current.setValue(canRotate ? UIInterfaceOrientation.portrait.rawValue : UIInterfaceOrientation.landscapeLeft.rawValue, forKey: "orientation")
}
}
同样在您的AppDelegate中,添加此功能:
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
if AppDelegate.canRotate {
return .portrait
} else {
//return the orientation you want your app to be in
return [.landscapeLeft, .landscapeRight]
}
}
此时,您可以通过调用AppDelegate.canRotate = true或false来控制是否可以旋转设备
剩下的就是在你的图片选择器代码中添加这个变量,这是你做的:
if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.camera) {
let imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = .camera
imagePicker.allowsEditing = true
AppDelegate.canRotate = true
self.present(imagePicker, animated: true, completion: nil)
}
此外,在此功能中:
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
AppDelegate.canRotate = false
picker.dismiss(animated: true, completion: nil)
}
在这一个中也是如此:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
AppDelegate.canRotate = false
picker.dismiss(animated: true, completion: nil)
}
此代码可能有优化,但这是您需要的核心功能。
让我知道这是怎么回事,如果它有效,有毛刺,或者没有。