Как глобально обнаружить изменения активной ориентации устройства вне swift-файла? - PullRequest
0 голосов
/ 29 декабря 2018

У меня проблемы с выяснением того, как обновлять угловые радиусы в контроллере представления калькулятора (см. Изображения в ссылке в конце этого поста).Я устанавливаю угловой радиус, используя viewWillLayoutSubviews (), и до сих пор он работал отлично.Тем не менее, я заметил, что если я перейду от экрана контроллера вида калькулятора, поверну устройство и вернусь к экрану контроллера вида калькулятора, радиус угла все равно будет соответствовать предыдущему экрану ориентации.Я попытался вызвать viewWillLayoutSubviews () внутри viewDidAppear (), но есть заметная задержка, прежде чем радиусы углов кнопок будут установлены правильно.

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

Снимки экрана моего текущего приложения с экрана загрузки до точки углового радиуса не обновляются правильно

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

вы можете сделать это в своем viewdidLoad, добавив ниже код для проверки ориентации устройства

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter]
 addObserver:self selector:@selector(orientationChanged:)
 name:UIDeviceOrientationDidChangeNotification
 object:[UIDevice currentDevice]];

теперь каждый раз, когда проверяете ориентацию устройства при входе, и в соответствии с тем, что в коде ниже, перезагружайте ваше представление

- (void) orientationChanged:(NSNotification *)note { }
0 голосов
/ 29 декабря 2018

Добавьте этот код вашему делегату приложения.Таким образом, вы знаете, находится ли устройство в альбомном или портретном режиме в глобальном масштабе.Затем вы можете использовать вид, чтобы изменить радиус.

import UIKit


@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

var window: UIWindow?

var didRotate: (Notification) -> Void = { notification in
    switch UIDevice.current.orientation {
    case .landscapeLeft, .landscapeRight:
        print("landscape")
    case .portrait, .portraitUpsideDown:
        print("Portrait")
    default:
        print("other")
    }
}



func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    NotificationCenter.default.addObserver(forName: UIDevice.orientationDidChangeNotification,
                                           object: nil,
                                           queue: .main,
                                           using: didRotate)


    return true
}

}
...