私は、サーバーから写真を取得し、Pulse News Reader が記事を表示するのと同様の方法で画面に表示する iPhone アプリケーションを開発しています。私は垂直方向にスクロールUITableView
しており、それぞれUITableViewCell
に独自のカスタムUITableView
インスタンスが含まれており、ユーザーは写真を水平方向にスクロールできます。
cellForRowAtIndexPath
現在、水平スクロール テーブルにデータを入力する方法は、垂直スクロール テーブルのメソッドでサーバー呼び出しを行うことです。新しいセルが表示されるたびに、次のコードのように、その特定のセルの写真のリクエストを送信します。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"EventCell";
EventViewCell *cell = (EventViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[EventViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
Event *event = [self.fetchedResultsController objectAtIndexPath:indexPath];
[self performPhotoFetchForEventID:event.id inCell:cell withRetries:3];
return cell;
}
このソリューションは、ユーザーが垂直のテーブルをゆっくりとスクロールする場合は非常にうまく機能しますが、ユーザーがリストをすばやくスクロールしたり、リストを「フリック」したりすると、機能しなくなります。基本的に、ユーザーが X 個のイベントをすばやくスクロールすると、アプリのビューがそれらの要求のうち最大 3 つの結果しか必要としない場合でも、アプリは X サーバー要求を開始し、すべての結果を返します。これにより、画像が間違った行に表示されたり、遅延が発生したりすることがあります。
ユーザーのスクロールが速すぎる場合に、サーバー リクエストの発生を防止またはキャンセルするにはどうすればよいですか。または、これを実装して目的の効果を得るより良い方法はありますか?