#iphone #xcode #view #autorotate #parentviewcontroller
#iPhone #xcode #Вид #автозапуск #parentviewcontroller
Вопрос:
Итак, в настоящее время у меня есть 3 вида, и мне нужен только один из них для автоматического поворота в любую ориентацию, в то время как остальные остаются в портретном режиме. Прямо сейчас моя настройка — это splashviewcontroller, который переходит в режим просмотра A, а внутри view A — кнопка для переключения на просмотр B. Все, что я хочу, это чтобы view B мог поворачиваться в любую ориентацию.
Когда я возвращаю YES для shouldautorotatetointerfaceorientation в splashviewcontroller, каждое представление вращается, потому что это родительское представление. Когда я возвращаю портрет только в splashview, ничего не вращается, даже если другие виды возвращают YES. Есть ли способ вращать только вид B? Я готов сделать это вручную, если вы можете предоставить код. Спасибо
Комментарии:
1. Как добавляется B? Если он не является независимым (т. Е. Через навигационный контроллер), это может быть проблемой.
2. @stavash итак, как бы мне сделать его независимым? Я добавил, выполнив добавление подкласса UIViewController
3. @stavash есть ли способ создать независимый просмотр без панели вкладок? Могу ли я ссылаться на независимый просмотр с помощью кнопки?
Ответ №1:
Вы можете вручную настроить вращение любого желаемого объекта UIView следующим образом:
Редактировать:
В init или viewDidLoad
- (void)viewDidLoad
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(rotate) name:UIDeviceOrientationDidChangeNotification object:nil];
[super viewDidLoad];
}
#define degreesToRadian(x) (M_PI * (x) / 180.0)
-(void)rotate{
self.view.bounds = CGRectMake(0, 0, 0, 0);
if ([UIDevice currentDevice].orientation == UIInterfaceOrientationPortrait){
CGAffineTransform landscapeTransform = CGAffineTransformMakeRotation(degreesToRadian(0));
landscapeTransform = CGAffineTransformTranslate (landscapeTransform, 0.0, 0.0);
self.view.bounds = CGRectMake(self.view.bounds.origin.x, self.view.bounds.origin.y, 320, 480);
[self.view setTransform:landscapeTransform];
} else if ([UIDevice currentDevice].orientation == UIInterfaceOrientationPortraitUpsideDown){
CGAffineTransform landscapeTransform = CGAffineTransformMakeRotation(degreesToRadian(180));
landscapeTransform = CGAffineTransformTranslate (landscapeTransform, 0.0, 0.0);
self.view.bounds = CGRectMake(self.view.bounds.origin.x, self.view.bounds.origin.y, 320, 480);
[self.view setTransform:landscapeTransform];
} else if ([UIDevice currentDevice].orientation == UIInterfaceOrientationLandscapeRight){
CGAffineTransform landscapeTransform = CGAffineTransformMakeRotation(degreesToRadian(90));
landscapeTransform = CGAffineTransformTranslate (landscapeTransform, 0.0, 0.0);
self.view.bounds = CGRectMake(self.view.bounds.origin.x, self.view.bounds.origin.y, 480, 320);
[self.view setTransform:landscapeTransform];
}else if ([UIDevice currentDevice].orientation == UIInterfaceOrientationLandscapeLeft){
CGAffineTransform landscapeTransform = CGAffineTransformMakeRotation(degreesToRadian(270));
landscapeTransform = CGAffineTransformTranslate (landscapeTransform, 0.0, 0.0);
self.view.bounds = CGRectMake(self.view.bounds.origin.x, self.view.bounds.origin.y, 480, 320);
[self.view setTransform:landscapeTransform];
}
}
Комментарии:
1. ничего не происходит, когда я помещаю это в свой ViewB.m. View B — это modalviewcontroller, есть ли что-то глупое, что я могу делать неправильно?
2. Чтобы заставить его работать, вам нужно будет запустить метод rotate после того, как вы поймаете событие rotation. Пожалуйста, проверьте правку в ответе
3. Хорошо, это работает отлично, но проблема в том, что, хотя вид вращается, у меня есть видео, которое воспроизводится внутри webview внутри ViewB, которое мне также нужно повернуть. Есть предложения по выполнению этого? Спасибо
Ответ №2:
В разделе «Сводные цели» поддерживается ориентация интерфейса, все элементы выбраны, кроме перевернутого, поэтому все, что вам нужно сделать, это перейти к вашему файлу .m, который обрабатывает представление, и использовать этот фрагмент кода.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
Это помогло мне.