YouTube видео внутри приложения iPhone UITableView - PullRequest
5 голосов
/ 06 марта 2011

В настоящее время у меня есть таблица с видео на YouTube, встроенная в пользовательские ячейки.

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

Проблема заключается в следующем:

Загрузка миниатюр занимает некоторое время.

Когда я прокручиваю список видео, ему все равно приходится загружать миниатюры.

Если я прокручиваю назад вверх ... он пытается загрузить миниатюры видео еще раз.

Кто-нибудь получил какие-либо предложения относительно более эффективных способов сделать это или способов заставить ячейки таблицы хранить данные, а не заменять их?

Мой код выглядит следующим образом:

CustomVideoCell *cell = (CustomVideoCell *)[tableView dequeueReusableCellWithIdentifier:@"CustomVideoCell"];

if (cell == nil) {

UIViewController *temporaryController = [[UIViewController alloc] initWithNibName:@"CustomVideoCell" bundle:nil];

cell = (CustomVideoCell *)temporaryController.view;

[temporaryController release];


GDataEntryBase *entry = [[self.feed entries] objectAtIndex:indexPath.row];
NSString *title = [[entry title] stringValue];
NSString *videoID = [[(GDataEntryYouTubeVideo *)entry mediaGroup] videoID];


NSString *htmlString = 
[
 [NSString alloc] 
 initWithFormat:@"<html><head><meta name = \"viewport\" content = \"initial-scale = 2.0, user-scalable = no, width = 110\"/></head><body style=\"background:#000;margin-top:0px;margin-left:0px\"><div><object width=\"110\" height=\"90\"><param name=\"movie\" value=\"http://www.youtube.com/v/%@&f=gdata_videos&c=ytapi-my-clientID&d=nGF83uyVrg8eD4rfEkk22mDOl3qUImVMV6ramM\"></param><param name=\"wmode\" value=\"transparent\"></param><embed src=\"http://www.youtube.com/v/%@&f=gdata_videos&c=ytapi-my-clientID&d=nGF83uyVrg8eD4rfEkk22mDOl3qUImVMV6ramM\" type=\"application/x-shockwave-flash\" wmode=\"transparent\" width=\"110\" height=\"90\"></embed></object></div></body></html>", 
 videoID, videoID
 ];


[[[cell.web subviews] lastObject] setScrollEnabled:NO];
[cell.web loadHTMLString:htmlString baseURL:[NSURL URLWithString:@"http://www.website.com"]];

cell.title.text = title;

Приветствия

Ответы [ 3 ]

3 голосов
/ 06 марта 2011

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

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

Я возвращаю ячейку в массиве на основе индекса следующим образом:

return [cellArray objectAtIndex:indexPath.row];

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

1 голос
/ 11 июня 2012

Кэшируйте только веб-представления, а не всю ячейку таблицы.Таким образом, вы все еще можете повторно использовать клетки.Я использовал YouTubeView здесь http://iosdevelopertips.com/video/display-youtube-videos-without-exiting-your-application.html

 -(void) cacheYouTubeViews {
 NSArray * videos  = [self.fetchedResultsController fetchedObjects]; 
 self.myVideosCache = [[NSMutableArray alloc] initWithCapacity:[videos count]]; 

 for (Video * video in videos) {
    YouTubeView * youTubeView = [[YouTubeView alloc] 
                                 initWithStringAsURL: video.link
                                 frame:CGRectMake(0, 0, 
                                                  kVideoThumbnailSize, 
                                                  kVideoThumbnailSize)];
    [self.myVideosCache addObject:youTubeView]; 


   }


}

Затем в вашем методе cellForRowAtIndexPath замените YouTubeView ячейки:

   YouTubeView * youTubeView = [self.myVideosCache objectAtIndex:indexPath.row]; 
   [cell.contentView addSubview:youTubeView];

Обязательно удалите старый YouTubeView из подпредставления ячейкиИерархия.
Я нахожу утечки памяти при прокрутке таблицы, возможно, это общая проблема с использованием UIWebView в UITableView.

0 голосов
/ 06 марта 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...