Какова аналогичная константа UIDeviceOrientationDidChangeNotification для изменения ориентации интерфейса?

Я знаю, как слушать физическое устройство, меняющее ориентацию, наблюдая UIDeviceOrientationDidChangeNotification, Вместо того, чтобы прослушивать смену устройства, какое уведомление скажет мне, что интерфейс изменился? Изменение интерфейса на самом деле является подмножеством изменения устройства, потому что каждый контроллер представления может поддерживать только некоторые ориентации.

Я знаю, что контроллер представления может реализовать didRotateFromInterfaceOrientation:, но я ищу уведомление, а не функцию обратного вызова, потому что мне нужно реагировать на изменения ориентации в обычном контроллере, а не в контроллере представления. Это контроллер для камеры. Я хотел бы поместить все свои обработчики ориентации в этот контроллер вместо того, чтобы повторять его снова и снова во всех контроллерах вида, которые используют контроллер камеры.

1 ответ

Решение

Я не уверен, что вы подразумеваете под "обычным контроллером", но если вы хотите получать уведомления об изменении ориентации для каждого из ваших UIViewController, чем вы могли бы создать абстрактный UIViewController, который реализует didRotateFromInterfaceOrientation: метод, где вы можете опубликовать свое пользовательское уведомление. Чем сделать каждый UIViewController подклассом этого абстрактного UIViewController. Например.

 #import <UIKit/UIKit.h>

 @interface MyAbstractViewController : UIViewController

 @end

 @implementation MyAbstractViewController

 -(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
     [[NSNotificationCenter defaultCenter] postNotificationName:@"MyNotificationName" object:self];
 }

 @end

Создайте свои UIViewControllers как подкласс MyAbstractViewController

 #import <UIKit/UIKit.h>
 #import "MyAbstractViewController.h"

 @interface ViewController : MyAbstractViewController

 @end

Сделать необходимые объекты в качестве наблюдателей "MyNotificationName"

 #import <Foundation/Foundation.h>

 @interface MyController : NSObject

 @end

 @implementation MyController

 -(id)init {
      self = [super init];
      if (self) {
          [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(vcDidChangeOrientation:) name:@"MyNotificationName" object:nil];
          return self;
      }
      return nil;
 }

 -(void)vcDidChangeOrientation:(NSNotification *)notification {
      UIViewController *vController = (UIViewController *)[notification object];
      //Do whatever you want to do with it
 }

 @end
Другие вопросы по тегам