2013-12-20 8 views
2

У меня есть метод загрузки нескольких видеороликов youtube в UIWebview, и у меня есть много видеороликов, и когда я запускаю код, я получаю Предупреждение о получении памяти и приложение разбилось. Я попытался это исправить с помощью did received memory waring, но ее не работает, это метод, который я использую: -Предупреждение о получении памяти при загрузке uibweview

-(void) setScrollView:(UIScrollView *)scrollview :(NSArray *)contentArray{ 

int x=0; 

for(NSDictionary *str in contentArray){ 

    UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(x, 0, 123, 123)]; 

    webView.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth; 

    webView.scrollView.scrollEnabled = NO; 

    webView.scrollView.bounces = NO; 

    NSString *link = [str objectForKey:@"UTUBEURL"]; 

    link = [@"http://www.youtube.com/v/" stringByAppendingFormat:link]; 

    NSLog(@"link = %@",link); 


    NSString *embedHTML = @"\ 
    <html><head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0 \">\ 
    <style type=\"text/css\">\ 
    body {\ 
    background-color: transparent;\ 
    color: white;\ 
    }\ 
    </style>\ 
    </head><body width=\"%0.0f\" height=\"%0.0f\" style=\"margin:0\">\ 
    <embed id=\"yt\" src=\"%@\" type=\"application/x-shockwave-flash\" \ 
    width=\"%0.0f\" height=\"%0.0f\" autostart=\"true\"></embed>\ 
    </body></html>"; 

    NSString* html = [NSString stringWithFormat:embedHTML,webView.frame.size.width, webView.frame.size.height,link, webView.frame.size.width, webView.frame.size.height]; 


    [webView loadHTMLString:html baseURL:nil]; 


    UILabel *title = [[UILabel alloc] initWithFrame:CGRectMake(x,123,200,20)]; 

    [title setFont:[UIFont systemFontOfSize:11]]; 
    [title setBackgroundColor:[UIColor blackColor]]; 
    [title setTextColor:[UIColor whiteColor]]; 
    title.text = [NSString stringWithFormat:@" %@",[str objectForKey:@"DISPLAYTEXT"]]; 

    x += webView.frame.size.width+2; 


    [scrollview addSubview:webView]; 
    [scrollview addSubview:title]; 

} 

scrollview.contentSize = CGSizeMake(x, scrollview.frame.size.height); 
} 

я имею около 50 видео здесь, так что я могу сделать, чтобы избежать этого я звоню этот метод в стороне мой viewDidLoad. Есть ли способ сделать это лучше, используя поток, может ли кто-нибудь помочь мне с этим? но у меня нет никаких знаний о потоке на ios.

+1

расПредеЛение много UIWebView довольно дорого – Joshua

+0

Почему вы создаете 50 Webviews?, Cr запустите один WebView и замените URL-адреса, которые будут воспроизводиться только на этом веб-экране. Разве это что-то отличное от вашего требования? – mAc

+0

Вы можете использовать жестов салфетки для просмотра видео, которое будет воспроизводиться на этом веб-просмотре, и в соответствии с ним заменить ваши UILabels тоже. – mAc

ответ

0

Я не могу написать весь код для вас, но предоставил вам короткий фрагмент кода, который поможет вам.

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

**In VideoPlayContoller.h** 

#import <MediaPlayer/MediaPlayer.h> 
@interface VideoPlayViewController : UIViewController{ 

    MPMoviePlayerController *moviePlayerController; 

} 

@property (nonatomic, readwrite) int i; 
@property (nonatomic, retain) NSMutableArray *allVideoUrls; 

-(void)playVideo:(int)_index; 

- (IBAction)onTapBack:(id)sender; 

@end 

**In VideoPlayContoller.m** 

#import "VideoPlayViewController.h" 
#import <MediaPlayer/MediaPlayer.h> 

@implementation VideoPlayViewController 

@synthesize i,allVideoUrls; 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
     allVideoUrls = [[NSMutableArray alloc]init]; 
    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 

    [self playVideo:i]; 
} 

-(void)playVideo:(int)_index{ 

    NSURL *fileURL = [NSURL URLWithString:[allVideoUrls objectAtIndex:i]]; 

    if(!moviePlayerController){ 
     moviePlayerController = [[MPMoviePlayerController alloc] init]; 
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlaybackComplete:) name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayerController]; 
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(doneButtonClick:) name:MPMoviePlayerWillExitFullscreenNotification object:nil]; 
    } 
    moviePlayerController.fullscreen = YES; 
    [moviePlayerController setContentURL:fileURL]; 
    if([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0){ 
     [moviePlayerController.view setFrame:CGRectMake(0, 62, 320, 504)]; 
    } 
    else{ 
     [moviePlayerController.view setFrame:CGRectMake(0, 62, 320, 416)]; //y = 42 
    } 
    [self.view addSubview:moviePlayerController.view]; 

    [moviePlayerController play]; 
} 

- (IBAction)onTapBack:(id)sender { 
    [moviePlayerController stop]; 
    [self dismissModalViewControllerAnimated:NO]; 
} 

- (void)moviePlaybackComplete:(NSNotification *)notification{ 
    i++; 

     [moviePlayerController stop]; 
     [moviePlayerController.view removeFromSuperview]; 
     [self dismissModalViewControllerAnimated:NO]; 
     [self dismissModalViewControllerAnimated:NO]; 
} 

-(void)doneButtonClick:(NSNotification*)aNotification{ 
    NSLog(@"Done button Clicked"); 
    [self dismissModalViewControllerAnimated:NO]; 
} 
+0

спасибо за ур ответ @mAc, извините за беспокойство, но вы можете показать мне, как назвать этот вызов этим классом? Я пишу метод, чтобы получить кран простого изображения и получить его номер индекса, но я путаюсь, как назвать класс, который вы мне даете, можете ли вы мне помочь? я сожалею, что беспокою вас, я немного новичок в программировании ios –

+0

и еще одна вещь, я не могу получить GAITrackedViewController для моего проекта, есть ли дополнительная библиотека, которую я должен использовать, чтобы добраться до нее?спасибо –

+0

Используйте UIViewController вместо GAITrackedViewController – mAc

0

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

Возьмите чтение из нескольких учебников и получить себе Шифрование до скорости -

  1. http://www.raywenderlich.com/22324/beginning-uicollectionview-in-ios-6-part-12
  2. http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UICollectionView_class/Reference/Reference.html
  3. http://www.cocoacontrols.com/search?utf8=%E2%9C%93&q=UICollectionView
  4. http://www.appcoda.com/ios-programming-uicollectionview-tutorial/