2011-08-14 4 views
0

Apple의 PhotoScroller 예제를 수정하려고하는데 해결할 수없는 문제가 발생했습니다.Apple의 PhotoScroller 예제를 사용하여 추가 이미지를 미리로드하십시오.

기본적으로 PhotoScroller는 원래 이미지 배열을 로컬로로드했습니다. 이 문제를 수정하고 URL에서 이미지 파일을 동적으로 요청하도록 변경하려고합니다. 사용자가 다음 페이지로 스크롤하면 새 URL에서 다음 이미지를 가져옵니다.

성능 향상을 위해 사용자가 다음 페이지로 스크롤하는 동안 다운로드되는 이미지를 기다릴 필요가 없도록 다음 페이지를 미리로드하고 싶습니다. 다음 페이지가 현재 페이지에 오면 그 다음 페이지가로드 될 것입니다.

나는 이것을 어떻게 달성 할 수 있을지 잘 모르겠지만 누군가가 나에게 무엇을 할 수 있는지 보여주기를 바랍니다. 여기

내 사용자 지정 코드 (애플의 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]; 

} 

도움 주셔서 감사합니다! 로렌스

답변

0

동시 작업을 사용하여 이미지를 하나씩 가져올 수 있습니다. NSOperations를 사용하여 종속성 체인을 설정하여 이미지가 백그라운드에서 연속적으로로드되거나 모든 이미지를 동시에 다운로드하도록 할 수 있습니다.

큰 이미지의 문제점은 파일 시스템에 이미지를 저장하더라도 이미지를 렌더링하는 데 "시작"시간이 있다는 것입니다. 또한 PhotoScroller에서 Apple은 각 이미지의 세부 묘사를 위해 모든 이미지를 사전에 타일링하여 "속여"합니다. Apple은 PhotoScroller에서 Plain OLE JPEG 만 렌더링 할 수있는 방법이 없으므로 미리 타일을 만들 수 없다면 아무 쓸모가 없습니다.

궁금한 점이 있다면 PhotoScrollerNetwork 프로젝트를 github에서 보면서 여러 이미지를 다운로드하고 임시 파일로 미리 타일을 만드는 방법을 알 수 있습니다.

관련 문제