У меня есть VC, где пользователь берет фотографию или выбирает ее из своей библиотеки.Настройка авторотации и предпочтительной ориентации на основе ориентации фотографий
После того, как фотография сделана/выбрана, она передается в UIImageView
на следующем VC.
Я бы хотел показать этот контроллер View, ТОЛЬКО в Ориентации, что изображение находится в. Поэтому, если пользователь берет фотографию в левом левом углу (после выбора «Использовать»), следующий контроллер просмотра должен загрузиться в «Пейзаж слева» с помощью этого изображения в поле «UIImageView
». Если они берут изображение в портрете, диспетчер просмотра загружается в портрет. Как только VC загрузится в правильной ориентации, он не должен двигаться (вращаться больше).
Это то, что я пытался до сих пор, но не может заставить его работать так, как я ожидал:
#pragma mark -
#pragma mark - Auto Rotation Overrides
- (BOOL)shouldAutorotate {
if (self.photoImage != NULL) {
// Check that photoImage has an image
if (self.photoImage.imageOrientation == 1 || self.photoImage.imageOrientation == 0) {
// Landscape left = 0, Landscape rigt = 1
return YES;
} else {
// Portrait normal = 3, portait upside down = 2
return NO;
}
}
// Fallback to portrait
return NO;
}
-(NSUInteger)supportedInterfaceOrientations {
if (self.photoImage != NULL) {
// Check that photoImage has an image
if (self.photoImage.imageOrientation == 0) {
return UIInterfaceOrientationMaskLandscapeLeft;
} else if (self.photoImage.imageOrientation == 1) {
return UIInterfaceOrientationMaskLandscapeRight;
} else {
return UIInterfaceOrientationMaskPortrait;
}
}
// Fallback to Portrait
return UIInterfaceOrientationMaskPortrait;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
if (self.photoImage != NULL) {
// Check that photoImage has an image
if (self.photoImage.imageOrientation == 0) {
return UIInterfaceOrientationLandscapeLeft;
} else if (self.photoImage.imageOrientation == 1) {
return UIInterfaceOrientationLandscapeRight;
} else {
return UIInterfaceOrientationPortrait;
}
}
// Fallback to Portrait
return UIInterfaceOrientationPortrait;
}
----- EDIT -----
Как shouldAutoRotate
не называется пока устройство не будет повернуто, как мне получить его автоматически на viewDidLoad, измените ориентацию на основе ориентации изображения. Я вижу, что метод supportInterfaceOrientations
вызывается, и возвращается только Пейзаж, но он не перемещает вид сразу ...?
----- ----- EDIT2
ли preferredInterfaceOrientationForPresentation
работа в iOS6 тоже? Я могу настроить подклассу навигационного контроллера, чтобы посмотреть на self.topViewControllers preferredInterfaceOrientationForPresentation
, однако это, по-видимому, означает, что для каждого метода topViewController должен быть этот метод. В идеале я хочу настроить подкласс, чтобы сказать: , если topViewController имеет ответ на preferredInterfaceOrientationForPresentation
, а затем используйте этот портрет/по умолчанию. Это можно сделать?
Если это так, я могу обновить preferredInterfaceOrientationForPresentation
, который будет загружать этот VC в правильной ориентации, тогда shouldAutoRotate
будет контролировать его, не поворачивая обратно в другую ориентацию?
Спасибо, да, я использую панель навигации. Я предполагаю, что это должно применяться в viewDidAppear на основе инструкции if для ориентации изображения, которую у меня есть. – StuartM
viewWillAppear, viewDidLoad или viewDidAppear должны работать в зависимости от вашей ситуации. – JonahGabriel
Спасибо, что он повернул представления, но не панель Nav, как вы думали ... так что это не решение на данный момент. Моя вторая мысль заключалась бы в том, чтобы заставить метод prefferredInterface работать таким образом, чтобы он отображался в правильном интерфейсе, и shouldAutoRotate перестанет вращаться снова ...? Я отредактировал вопрос с обновлением – StuartM