несколько UIWebView-ов на UIScrollView - PullRequest
1 голос
/ 12 января 2012

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

Код, используемый для отображения веб-представлений, выглядит следующим образом:

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 и запускать JavaScript только после того, как панель подпрыгнет в окне просмотра, япланируете показывать более 60 веб-просмотров с html-страницами?

1 Ответ

0 голосов
/ 26 января 2012

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

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