Обнаружение поворота в ландшафт вручную - PullRequest
11 голосов
/ 09 июня 2010

Я работаю над приложением для iPhone на основе UITabBarController и UIViewControllers для каждой страницы. Приложение должно работать только в портретном режиме, поэтому каждый контроллер представления + делегат приложения идет с этой строкой кода:

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

Есть один контроллер вида, в котором я хотел бы открыть UIImageView, когда iPhone поворачивается в альбомную ориентацию. Дизайн изображения выглядит пейзажно, хотя ширина и высота 320х460 (так его портрет).

Как я могу / должен определить этот тип вращения вручную, просто в этом конкретном контроллере вида, не имея автоматического поворота на всем виде?

Томас

ОБНОВЛЕНИЕ:

Спасибо!

Я добавил этого слушателя в viewDidLoad:

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

didRotate выглядит так:

- (void) didRotate:(NSNotification *)notification

    {   
        UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];

        if (orientation == UIDeviceOrientationLandscapeLeft)
        {
            //your code here

        }
    }

Ответы [ 2 ]

20 голосов
/ 09 июня 2010

Мне нужно было это в старом проекте - надеюсь, он все еще работает ...

1) Зарегистрировать уведомление:

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(detectOrientation)
                                             name:UIDeviceOrientationDidChangeNotification
                                           object:nil]; 

2) Затем вы можете проверить вращение при изменении:

-(void) detectOrientation {
    if (([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft) || 
        ([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight)) {
        [self doLandscapeThings];
    } else if ([[UIDevice currentDevice] orientation] == UIDeviceOrientationPortrait || [[UIDevice currentDevice] orientation] == UIDeviceOrientationPortraitUpsideDown) {
        [self doPortraitThings];
    }   
}

Надеюсь, это поможет!

2 голосов
/ 09 августа 2011

лучший код для ответа Comic Sans будет ниже .. Его код не всегда срабатывает корректно (только 80% времени в моем тестировании)

-(void) detectOrientation {
    if (UIDeviceOrientationIsLandscape([[UIDevice currentDevice] orientation])) {
        [self setupForLandscape];
    } else if (UIDeviceOrientationIsPortrait([[UIDevice currentDevice] orientation])) {
        [self setupForPortrait];
    } 
}
...