Требуется помощь в настройке интерфейса, в котором для большинства элементов установлено фиксированное вращение, но окна оповещения и общего доступа автоматически поворачиваются вместе с устройством.
Я работаю с Xcode 7 и Swift 2. Я работаю над интерфейсом со слоем предварительного просмотра камеры и элементами управления, которые отображаются аналогично родному приложению для камеры iOS. Все элементы управления остаются на месте при повороте устройства, но значки "поворачиваются" на месте для правильной ориентации устройства. (Надеюсь, я объяснил это таким образом, чтобы это имело смысл. Если нет, откройте приложение родной камеры на вашем iPhone и несколько раз переверните устройство, чтобы увидеть, о чем я говорю.)
У меня уже работает базовый интерфейс, исправляя общую ориентацию интерфейса с помощью:
override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
return UIInterfaceOrientationMask.LandscapeRight
}
Затем я использую преобразование, чтобы повернуть каждую кнопку для ориентации устройства.
Проблема заключается в следующем: мне нужно иметь возможность представлять сообщения оповещения (UIAlertController) и интерфейс общего доступа (UIActivityViewController) в этом же интерфейсе. Как заставить эти элементы вращаться в правильной ориентации, сохраняя при этом остальную часть интерфейса статичной?
На мой взгляд, здесь есть два возможных подхода - я просто не знаю, как заставить один из них работать:
Установите интерфейс на автоматический поворот и поддержите все ориентации, но отключите автоматический поворот для видов, которые мне нужно сохранить на месте.
Настройте интерфейс так, чтобы разрешить только.landscapeLeft (который в настоящее время так настроен) и найти способ вращать сообщения с предупреждениями и открывать диалоговое окно.
1 ответ
Получил это работает. Мне нужно было получить доступ к представленному ViewController.view, чтобы повернуть предупреждение и поделиться мнениями.
//used to periodically trigger a check of orientation
var updateTimer: NSTimer?
//Checks if the device has rotated and, if so, rotates the controls. Also prompts the user that portrait orientation is bad.
func checkOrientation(timer: NSTimer) {
//Array of the views that need to be rotated as the device rotates
var viewsToRotate = [oneView, anotherView]
//This adds the alert or sharing view to the list, if there is one
if let presentedVC = presentedViewController?.view {
viewsToRotate.append(presentedVC)
}
//Rotate all of the views identified above
for viewToRotate in viewsToRotate {
switch UIDevice.currentDevice().orientation {
case UIDeviceOrientation.Portrait:
viewToRotate.transform = CGAffineTransformMakeRotation(CGFloat(-M_PI_2))
case UIDeviceOrientation.PortraitUpsideDown:
viewToRotate.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2))
case UIDeviceOrientation.LandscapeRight:
viewToRotate.transform = CGAffineTransformMakeRotation(CGFloat(2 * M_PI_2))
default:
viewToRotate.transform = CGAffineTransformMakeRotation(CGFloat(0))
}
}
}