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];
}
ありがとうございます! ローレンス