Ротация устройств iOS6 будет ограничена

Для моего приложения я хочу, чтобы устройство все равно вращалось, но в перевернутом виде. Это работает нормально. Однако я хочу, чтобы приложение не вращалось конкретно с

пейзаж слева -> пейзаж справа — и наоборот

Если кому-то интересно, это потому, что это вращение портит мои макеты, так как каждый из них вращается из общей точки.

Мой код для iOS 5, который, я думаю, будет работать, выглядит так:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {

    NSLog(@"Rotating");
    if((lastOrient == 3 && toInterfaceOrientation == 4) || (lastOrient == 4 && toInterfaceOrientation == 3)){
       lastOrient = toInterfaceOrientation;
       return NO;
    }

   lastOrient = toInterfaceOrientation;
   return YES;

}

Где 3= пейзаж слева и 4= пейзаж справа

Любые предложения о том, как это сделать с iOS6? Или совсем другое решение?


person Jameo    schedule 27.11.2012    source источник


Ответы (2)


shouldAutorotateToInterfaceOrientation устарела в ios6. Использовать это:

- (BOOL)shouldAutorotate {

UIInterfaceOrientation orientation = [[UIDevice currentDevice] orientation];

if (lastOrientation==UIInterfaceOrientationPortrait && orientation == UIInterfaceOrientationPortrait) {
 return NO;

}

return YES;
}

Не тестировал этот код. Вы можете получить дополнительную информацию об этих сообщениях: shouldAutorotateToInterfaceOrientation не работает в iOS 6 shouldAutorotateToInterfaceOrientation не вызывается в iOS 6

person dmoss18    schedule 27.11.2012
comment
по-видимому, вы можете включить обе реализации (shouldAutorotateToOrientation и shouldAutorotate), и он должен каскадироваться с ios6 - person dmoss18; 28.11.2012

Хорошо, я ответил на свой вопрос здесь:

Хорошая новость в том, что определенно есть способ сделать это! Итак, вот основы:

В iOS6 именно appDelegate определяет, может ли приложение вращаться в целом. Затем, когда устройство получит сигнал поворота, оно запросит у вашего представления поддерживаемые ориентации. Здесь я реализовал свой код. На самом деле, shouldAutorotate() не играет никакой роли в решении.

Поэтому я создаю переменную для отслеживания последней ориентации и меняю ее в

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{

Таким образом, я могу сравнить ориентации

-(NSUInteger)supportedInterfaceOrientations
{
    NSLog(@"Last Orient = %d", lastOrient);
    NSUInteger orientations = UIInterfaceOrientationMaskPortrait;

    if (lastOrient != 3 && lastOrient != 4) {
        NSLog(@"All good, rotate anywhere");
        return UIInterfaceOrientationMaskAllButUpsideDown;
    }
    else if(lastOrient == 3){
        orientations |= UIInterfaceOrientationMaskLandscapeRight;
        NSLog(@"Can only rotate right");
    }
    else if(lastOrient == 4){
        orientations |= UIInterfaceOrientationMaskLandscapeLeft;
        NSLog(@"Can only rotate left");
    }

    return orientations;
}

Кажется, работает для меня. Немного взлом, но он делает то, что должен делать

person Jameo    schedule 27.11.2012