2013-06-05 3 views
5

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

У меня есть статическая библиотека, которая добавляет элементы пользовательского интерфейса в качестве наложений к переданному контроллеру представления (контроллеру корневого контроллера клиента) в качестве подзонов. Проблема заключается в том, что наши элементы пользовательского интерфейса поддерживают только ориентацию на портрет, в то время как приложение нашего клиента может поддерживать как портрет, так и пейзаж. Это прекрасно, если наши элементы пользовательского интерфейса не авторотируются, когда видят наши клиенты.

Я хотел был бы зафиксировать ориентацию к портрету только для нашего регулятора взгляда. В IOS 6, когда я использую следующий код в контроллере представления моей библиотеки, это не влияет на поведение автоповорота на всех:

-(BOOL)shouldAutorotate{ 
return NO; 
} 

-(NSInteger)supportedInterfaceOrientations{ 
    NSInteger orientationMask = 0; 
    if ([self shouldAutorotateToInterfaceOrientation: UIInterfaceOrientationPortrait]) 
     orientationMask |= UIInterfaceOrientationMaskPortrait; 
    return orientationMask; 
} 

Когда я поставил один и тот же код в контроллере представления корня, он отлично работает , при этом приложение перестает автоматически вращаться. Однако это не вариант для нас, поскольку в производстве у нас не будет доступа к контроллеру корневого представления нашего клиента. Есть ли способ заблокировать ориентацию просмотра от НЕ контроллера корневого представления или заблокировать ориентацию только для одного контроллера просмотра? Любой другой способ достичь того, что нам нужно, о котором я не думаю? В ожидании решений, которые работают в iOS < = 6, если это вообще возможно

+0

Как вы объясняете устройство уже в альбомной, когда ваши элементы инстанцируются? –

+0

Вы когда-нибудь находили решение? –

ответ

0

Вы не можете заблокировать ориентацию только для одного контроллера вида в целом. Таким образом, вы должны установить угол преобразования с родительским представлением при запуске просмотра и изменении ориентации.

Вы добавить код для тех, кто вид контроллера класса

- (void)viewWillAppear:(BOOL)animated{ 
[super viewWillAppear:animated]; 
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; 
if (orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight) { 
    [[self view] setBounds:CGRectMake(0, 0, self.view.frame.size.height, self.view.frame.size.width)]; 
    CGFloat radians = atan2f(self.view.transform.b, self.view.transform.a); 
    if (radians!=M_PI_2) { 
     [[self view] setTransform:CGAffineTransformMakeRotation(M_PI_2)]; 

    } 

} 

}

  • (пустоты) didRotateFromInterfaceOrientation: (UIInterfaceOrientation) fromInterfaceOrientation {

    UIInterfaceOrientation ориентации = [[UIApplication sharedApplication] statusBarOrientation ]; if (ориентация == UIInterfaceOrientationLandscapeLeft || ориентация == UIInterfaceOrientationLandscapeRight) { [[self view] setBounds: CGRectMake (0, 0, self.view.frame.size.height, self.view.frame.size.width)] ; CGFloat radians = atan2f (self.view.transform.b, self.view.transform.a); if (radians! = M_PI_2) { [[self view] setTransform: CGAffineTransformMakeRotation (M_PI_2)];

    } 
    

    } еще {

    [[посмотреть] самостоятельно SetBounds: CGRectMake (0, 0, self.view.frame.size.width, self.view.frame.size.height)]; CGFloat radians = atan2f (self.view.transform.b, self.view.transform.a); if (radians! = 0) { [[self view] setTransform: CGAffineTransformMakeRotation (0)];

    } 
    

    }}

Смежные вопросы