Разработка Iphone: есть ли способ заблокировать ориентацию во время выполнения? - PullRequest
0 голосов
/ 17 ноября 2011

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

У меня есть контроллер вида A., который может отображаться в портретной и альбомной ориентациях. Этот контроллер вида создается делегатом приложения.

Когда я нажимаю кнопку в представлении A. Я создаю контроллер представления B, который хочу отображать только в альбомной ориентации, и загружаю представление, как [A.view addSubView: B.view].

Когда я поворачиваю устройство, функция должна вызыватьAutorotateToInterfaceOrientation только в
контроллер A. Независимо от того, как я установил функцию в контроллере B. Его нельзя вызвать.

1 Ответ

5 голосов
/ 17 ноября 2011

При первом просмотре убедитесь, что

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
    return Yes;
}

И во втором виде установите его на

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
    return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}

Обновление: Хорошо, попробуй это ...
В вашем главном контроллере / делегате приложения, в котором shouldAutorotateToInterfaceOrientation запускается каждый раз, когда устройство вращается, поместите переменную глобального уровня. что-то вроде

.h
@interface NavAppDelegate : NSObject <UIApplicationDelegate> {
    Bool *isMain;
}

.m
-(void)viewDidLoad {
    isMain = Yes;
}
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
    if (isMain) {
        return Yes;
    } else {
        return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight);
    }
}
// This bit is where you'll have to adapt it to how you change your views
// but it's a basic idea.
-(void)bitThatDoesTheViewChange:(viewController *) controller {
   isMain = No;

   *viewController = controller;

   [viewController release];

   isMain = Yes;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...