2011-04-06 2 views
0

У меня есть контроллер навигации со столом. Когда вы нажимаете на одну из ячеек, он нажимает на представление с помощью uiwebview. Вы попадаете на страницу YouTube.uiwebview youtube, начиная с пейзажа thumbnail изменяет размер при повороте

Когда вы находитесь на столе в портрете и нажимаете на ячейку, вы видите страницу YouTube в портрете. При изменении ориентации миниатюра видео не обновляется. Таким образом, миниатюра меньше. Это отлично. Я на самом деле предпочитаю его меньше. Все содержимое, которое будет потреблять 2 строки, будет потреблять 1 строку. Итак, другими словами, все остальные настраиваются для новых измерений.

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

[webVIew refresh]; 

действительно работает, но он, очевидно, снова загружает всю страницу. Поэтому в зависимости от подключения будет мерцание или, возможно, сайт будет белым до его полной загрузки (при более медленных соединениях).

Я также попробовал загрузить веб-сайт в iframe. Вчера я задал аналогичный вопрос, это было для локальных страниц, которые я создавал. Ответ на этот вопрос состоял в том, чтобы положить <meta name='viewport' content='width=device-width; initial-scale=1.0; maximum-scale=1.0;'> в голову. Поэтому я попробовал это с iframe и получить страницу. Для начала это казалось глупым взломом, но я был готов туда пойти. Он даже не загрузил бы страницу. Я думаю, потому что страница youtube я загружаю перенаправления на другую страницу. После дальнейших исследований казалось, что в iframe есть другие проблемы, такие как прокрутка.

Так что мой вопрос, как я: A. Получить только маленькую картинку, чтобы изменить размер/перезагружать об изменении ориентации ИЛИ B. Получить миниатюру для загрузки в размерах он будет загружен в портретном режиме все время, даже если он был запущен в ландшафте.

ответ

0

Я нашел ответ, возможно, кто-то может объяснить это или предложить лучшее решение. Была также ошибка, которую я должен был решить.

  1. Я убедился, что uiwebview имеет делегат, установленный владельцем файлов.
  2. Я изменил родительский вид, когда она подтолкнула вид на форму из:

    [self.navigationController pushViewController: контроллер анимированные: ДА];

к (важная части, являющегося 320, я буду ограничивать вид на портрет):

[self.navigationController pushViewController:controller animated:YES]; 
controller.webView.hidden = YES; 
controller.webView.frame=CGRectMake(0, 0, 320,367); 

3. WebView я загрузить URL, как я всегда делал:

NSURL *url = [NSURL URLWithString:sUrl]; 
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; 
[webView loadRequest:requestObj]; 

4.В webviewdidfinishload я теперь:

if (self.interfaceOrientation == 
       UIInterfaceOrientationLandscapeLeft || 
       self.interfaceOrientation == 
       UIInterfaceOrientationLandscapeRight) { 
     self.webView.frame=CGRectMake(0, 0, 480,227); 

    } 
    self.webView.hidden = NO; 
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 

Все это, как правило, решить мою проблему, но потом я узнал, что GData URL я получаю от сервиса YouTube на самом деле получает решение о 2-ой ссылке. Тогда я думаю, youtube изменил свой формат URL-адреса, поэтому он перенаправляется на третий URL-адрес. Это означает, что мой код didfinishload вызывается до того, как загрузился последний URL-адрес. Чтобы решить эту проблему я добавил:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { 
    if ([[[NSString stringWithFormat:@"%@",request.URL] substringWithRange:NSMakeRange(0, 26)] isEqualToString:@"http://m.youtube.com/watch"]) { 
     NSString *sUrl=[NSString stringWithFormat:@"%@",request.URL]; 
     sUrl = [sUrl stringByReplacingOccurrencesOfString:@"http://m.youtube.com/watch?" withString:@"http://m.youtube.com/#/watch?"]; 

     NSURL *url = [NSURL URLWithString:sUrl]; 

     NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; 

     [self.webView loadRequest:requestObj]; 
     return NO; 
    } 
    //NSLog(@"request:%@",request.URL); 
    return YES; 
} 

Что я уверен, мог бы быть лучше, но в основном я сказать ему, чтобы игнорировать 2nd URL, и сделать мои собственные изменения, чтобы перейти к 3-му URL.

0

Вы должны переопределить этот метод в классе UIViewController и сделать изменения размера там:

  • (аннулируются) willRotateToInterfaceOrientation: (UIInterfaceOrientation) Продолжительность toInterfaceOrientation: (NSTimeInterval) продолжительность;
Смежные вопросы