Я пытаюсь изменить пример Apple PhotoScroller и столкнулся с проблемой, которую не смог решить.
По сути, PhotoScroller изначально загружал кучу изображений в массиве локально. Я пытаюсь изменить это и изменить к нему запросить файл изображения динамически от URL. После того, как пользователь перейдет на следующую страницу, он получит следующее изображение с нового URL.
Чтобы повысить производительность, я хотел предварительно загрузить следующую страницу, чтобы пользователю не нужно было ждать загрузки изображения при прокрутке на следующую страницу. Как только следующая страница появится на текущей странице, будет загружена следующая страница и т. Д. ...
Я не совсем уверен, как мне этого добиться, и я надеюсь, что кто-то покажет мне, что делать.
Вот мой пользовательский код: (Пожалуйста, обратитесь к полному коду из примера Apple PhotoScroller)
Метод tilePage: (Он будет вызываться в начале и каждый раз, когда пользователь прокручивает scrollView)
- (void)tilePages
{
// Calculate which pages are visible
CGRect visibleBounds = pagingScrollView.bounds;
int firstNeededPageIndex = floorf(CGRectGetMinX(visibleBounds) / CGRectGetWidth(visibleBounds));
int lastNeededPageIndex = floorf((CGRectGetMaxX(visibleBounds)-1) / CGRectGetWidth(visibleBounds));
firstNeededPageIndex = MAX(firstNeededPageIndex, 0);
lastNeededPageIndex = MIN(lastNeededPageIndex, [self imageCount] - 1);
// Recycle no-longer-visible pages
for (ImageScrollView *page in visiblePages) {
if (page.index < firstNeededPageIndex || page.index > lastNeededPageIndex) {
[recycledPages addObject:page];
[page removeFromSuperview];
}
}
[visiblePages minusSet:recycledPages];
// add missing pages
for (int index = firstNeededPageIndex; index <= lastNeededPageIndex; index++) {
if (![self isDisplayingPageForIndex:index]) {
ImageScrollView *page = [self dequeueRecycledPage];
//ImageScrollView *nextpage = [self dequeueRecycledPage];
if (page == nil) {
page = [[[ImageScrollView alloc] init] autorelease];
}
[self configurePage:page forIndex:index];
[pagingScrollView addSubview:page];
[visiblePages addObject:page];
}
}
}
Чтобы настроить индекс страницы и содержимое:
- (void)configurePage:(ImageScrollView *)page forIndex:(NSUInteger)index
{
//set page index
page.index = index;
//set page frame
page.frame = [self frameForPageAtIndex:index];
//Actual method to call image to display
[page displayImage:[self imageAtIndex:index]];
NSLog(@"index: %i", index);
}
Чтобы получить изображение с URL:
- (UIImage *)imageAtIndex:(NSUInteger)index {
NSString *string1 = [NSString stringWithString:@"http://abc.com/00"];
NSString *string2 = [NSString stringWithFormat:@"%d",index+1];
NSString *string3 = [NSString stringWithString:@".jpg"];
NSString *finalString = [NSString stringWithFormat:@"%@%@%@",string1,string2,string3];
NSLog(@"final string is: %@", finalString);
NSURL *imgURL = [NSURL URLWithString: finalString];
NSData *imgData = [NSData dataWithContentsOfURL:imgURL];
return [UIImage imageWithData:imgData];
}
Спасибо за помощь!
Лоуренс