ios, полный экран Youtube в веб-просмотре вращается

Я разрабатываю приложение, в котором хочу разместить видео на YouTube на странице. Он отлично работает с кодом ниже:

-(void)viewDidLoad{
    [super viewDidLoad];

}

- (void) viewWillAppear:(BOOL)animated {
    [self.navigationController setNavigationBarHidden:NO animated:YES];
    self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:.47 green:.43 blue:.4 alpha:1];

}

// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations
    //return (interfaceOrientation == UIInterfaceOrientationPortrait);
    NSString *htmlString;
    if(interfaceOrientation == UIInterfaceOrientationPortrait){
        htmlString = [NSString stringWithFormat:@"<html><head><meta name = \"viewport\" content = \"initial-scale = 1.0, user-scalable = no, width = 20\"/></head><body style=\"background:#F00;margin-top:0px;margin-left:0px\"><div><object width=\"768\" height=\"960\"><param name=\"movie\" value=\"%@\"></param><param name=\"wmode\" value=\"transparent\"></param><embed src=\"%@\" type=\"application/x-shockwave-flash\" wmode=\"transparent\" width=\"768\" height=\"960\"></embed></object></div></body></html>",urlToOpen,urlToOpen];

    }else{
        htmlString = [NSString stringWithFormat:@"<html><head><meta name = \"viewport\" content = \"initial-scale = 1.0, user-scalable = no, width = 212\"/></head><body style=\"background:#F00;margin-top:0px;margin-left:0px\"><div><object width=\"1024\" height=\"704\"><param name=\"movie\" value=\"%@\"></param><param name=\"wmode\" value=\"transparent\"></param><embed src=\"%@\" type=\"application/x-shockwave-flash\" wmode=\"transparent\" width=\"1024\" height=\"704\"></embed></object></div></body></html>",urlToOpen,urlToOpen];

    }
    [self.webView loadHTMLString:htmlString baseURL:[NSURL URLWithString:@"http://www.youtube.com"]];
    return  YES;
}

Вид работает нормально и в портрете, и в ландшафте. Проблема в том, что когда я вижу видео в полноэкранном режиме и поворачиваю его. Когда я заканчиваю полноэкранный режим, веб-просмотр не обнаруживает вращение и печатает веб-просмотр неправильно.

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

Спасибо


person ValentiGoClimb    schedule 14.11.2011    source источник


Ответы (3)


установить ширину содержимого на 100%

мой шаблон

<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"> \
<html xmlns=\"http://www.w3.org/1999/xhtml\"> <head> \
<meta name=\"viewport\" content=\"width=320\"> \
<style> \
html,body {-webkit-text-size-adjust: none; size:100%%} \
body {margin: 0; padding: 0;width:100%;} \
table { font-family:Georgia; font-size:%dpt; border-style: none; size:100%%} \
</style> </head>

....

person NeverBe    schedule 13.12.2011

Я предполагаю, что вы уже обрабатываете обратные вызовы ориентации? (shouldAutorotateToInterfaceOrientation, didRotateFromInterfaceOrientation)

Когда видео на YouTube заканчивается и фокус возвращается в ваше приложение, следует вызвать метод viewWillAppear. Там вы можете получить ориентацию устройства:

UIDeviceOrientation orientation = [UIDevice currentDevice].orientation;

Затем внесите изменения в макет. Это также будет обрабатывать макет при первом открытии этого представления.

Вы можете сделать это в операторе switch:

switch(orientation) {
    case UIInterfaceOrientationLandscapeLeft:  //layout for this landscape mode
    case UIInterfaceOrientationPortraitUpsideDown:  //layout for this portrait mode
person KevinS    schedule 14.11.2011
comment
Спасибо, но это не совсем правильно. Полноэкранный режим YouTube — это когда пользователь нажимает две стрелки, которые делают видео размером с экран. Затем, когда вы поворачиваете этот полный экран и нажимаете «Готово», экран сохраняет исходную ориентацию. viewWillAppear не вызывается. - person ValentiGoClimb; 15.11.2011

Я решил эту проблему, используя NSNotification, как это

    [[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(moviePlayerDidExitFullScreen)
                                             name:@"UIMoviePlayerControllerDidExitFullscreenNotification"
                                           object:nil];

и метод, который будет вызываться,

- (void)moviePlayerDidExitFullScreen
{
    UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;

    if (orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight || orientation == UIInterfaceOrientationPortraitUpsideDown) 
    {
        [[UIDevice currentDevice] setOrientation:UIInterfaceOrientationPortrait];
    }
}

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

person Shahid Aslam    schedule 02.05.2012
comment
Использование частного API может нарушить работу вашего приложения или вызвать отклонение. - person iSaalis; 11.02.2014
comment
Частный API? Вы можете увидеть какое-либо использование частного API выше? - person Shahid Aslam; 15.05.2014
comment
UIMoviePlayerControllerDidExitFullscreenNotification нигде не документирован. Значит, его можно было изменить в обновлении ОС... Также использование недокументированного уведомления могло вызвать отказ. - person iSaalis; 06.06.2014
comment
Мое приложение работает в прямом эфире в магазине приложений. Кстати, если у вас есть лучший способ, дайте мне знать? - person Shahid Aslam; 06.06.2014
comment
Это работает?? это или нет частный API?? Благодарность - person Frade; 21.12.2015