Должен автоматически отключать ориентацию на интерфейс от делегата

#objective-c #ios #delegates #rotation

#objective-c #iOS #делегаты #вращение

Вопрос:

в моем приложении у меня есть фоновые функции, которые кэшируют данные — работает нормально. Я реализовал UIView *cacheProgressView; который является визуальной индикацией прогресса механизма кэширования. (он содержит UIProgressBar и тому подобное)

Поскольку я хочу показать это во всех представлениях моего приложения (UINavigation со многими представлениями) Я добавил это в свой делегат, который довольно хорошо об этом заботится

 [self.window addSubview:cacheProgressView];
  

Проблема в том, что когда я поворачиваю устройство, и поскольку cacheProgressView привязан к окну, а не к представлению, я не могу установить его в правильное положение — следующая функция внутри делегата никогда не вызывается:

 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{

    NSLog(@"Rotation detected from the delegate");

    return YES;
}
  

как мне решить эту проблему?

Ответ №1:

Вы можете зарегистрироваться для получения уведомлений о ротации…

 [[NSNotificationCenter defaultCenter] addObserver:self
           selector:@selector(didRotate:)
           name:@"UIDeviceOrientationDidChangeNotification" object:nil];


- (void) didRotate:(NSNotification *)notification{  
  UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
  // do stuff
}