2011-08-14 7 views
0

AppleのPhotoScrollerの例を変更しようとしていますが、解決できなかった問題が発生しました。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]; 

    } 
} 

} 
URLから画像を取得するには

- (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); 
} 

:ページインデックスと内容を設定するには

- (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で見ることで、複数の画像をダウンロードして仮のファイルに並べる方法を知ることができます。

関連する問題