2012-01-12 3 views
1

Я экспериментирую с видом iPad, который я разрабатываю, и я столкнулся с проблемой памяти. В UIScrollView имеется несколько UIWebView-s. Каждый UIWebView отображает страницу html каждый из источника файла html. К сожалению, я не мог найти решение для обработки веб-представлений, чтобы загружать их плавно в фоновом режиме после загрузки приложения, а не загружать его и запускать все html-страницы со всеми его javascripts и изображениями, потому что я хочу, чтобы они были видимыми один раз Я прокручиваю их, я получаю сообщение «Предупреждение о получении памяти» на 30 панелях, и приложение разбивается.несколько UIWebView-s на UIScrollView

код я использую для отображения веб-просмотрах это:

NSInteger numberOfViews = 47; 
for (int i = 0; i < numberOfViews; i++) { 
    CGFloat yOrigin = i * 768; 
    DetailViewController *detailViewController2 = [[DetailViewController alloc] initWithNibName:@"Detail" bundle:nil]; 

    [detailViewController2.view setFrame:CGRectMake(yOrigin, 0, 768, 1024)]; 
    detailViewController2.view.clipsToBounds = YES; 
    [scroll.view insertSubview:detailViewController2.view atIndex:0];   
} 

scroll.scrollView.contentSize = CGSizeMake(768 * numberOfViews,1004); 
scroll.pageControl.numberOfPages = numberOfViews; 

self.view.clipsToBounds = YES; 
self.view.clearsContextBeforeDrawing = YES; 
CGRect frame; 
frame.origin.x = scroll.scrollView.frame.size.width * scroll.pageControl.currentPage; 
frame.origin.y = 0; 
frame.size = scroll.scrollView.frame.size; 
[scroll.scrollView scrollRectToVisible:frame animated:NO]; 
self.scrollViewController = scroll; 
[self.view insertSubview:scroll.view atIndex:0]; 

- (void)dealloc { 
    [scrollViewController release]; 
    [tableOfContentsViewController release]; 

    [portrait release]; 
    [tableOfContents1 release]; 
    [start release]; 

    [super dealloc]; 
} 

Код, который отображает содержимое HTML находится внутри DetaildViewController:

NSString *htmlPath = [[NSBundle mainBundle] pathForResource:htmlfilename 
                 ofType:@"html" 
                inDirectory:@"/htdocs" ]; 

    NSString *html = [NSString stringWithContentsOfFile:htmlPath 
               encoding:NSUTF8StringEncoding 
                error:nil]; 

    web.delegate = self; 
    [web setMultipleTouchEnabled:YES]; 
    [web loadHTMLString:html 
       baseURL:[NSURL fileURLWithPath: 
         [NSString stringWithFormat:@"%@/htdocs/", 
          [[NSBundle mainBundle] bundlePath]]]]; 

- (void)dealloc { 
    //---release the memory used by the property--- 
    [page release]; 


    [web setDelegate:nil]; 
    [web stopLoading]; 
    [web release]; 


    [orientation release]; 
    [page release]; 

    [super dealloc]; 
} 

Вопрос заключается в том, как я могу загрузить их плавно в фоновом режиме на UIScrollView и только запускать javascripts после того, как панель отскакивает в окне просмотра, я планирую отображать более 60 веб-просмотров с его html-страницами?

ответ

0

Вам необходимо переработать ваши взгляды. Создание кучи представлений, когда только один за один раз будет видимым, не является хорошей стратегией. У Apple есть несколько длительных видеоуроков по этому вопросу. Основная идея - использовать не более 3 или 4 просмотров (UiWebViews). По мере того, как вы прокручиваете и видимые границы становятся видимыми, вы их инициализируете. Когда он больше не виден, вы его уничтожаете. The Wall Street Journal iPad & Приложение iPhone использует аналогичный шаблон. Вот ссылка на несколько ресурсов & учебника: Are there any good UIScrollView Tutorials on the net?

+0

У вас есть ссылка на яблоко видео Re: рециркуляция веб взглядов? –

Смежные вопросы