画像を横に並べたスクロールビューアの作成 [4] 実機確認(修正)

2010年8月19日木曜日 | Published in | 0 コメント

このエントリーをはてなブックマークに追加

[前回] Cocoaの日々: 画像を横に並べたスクロールビューアの作成 [3] 循環スクロール(無限スクロール?)

念のため実機で確認したところ、素早くスクロールさせると何も表示されず真っ黒になることがわかった。

原因はこれ。
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
 CGFloat position = scrollView.contentOffset.x / IMAGE_WIDTH;
 CGFloat delta = position - (CGFloat)leftImageIndex_;
 
 if (fabs(delta) >= 1.0f) {
  if (delta > 0) {
   [self scrollWithDirection:kScrollDirectionRight];
  } else {
   [self scrollWithDirection:kScrollDirectionLeft];   
  }  
 }
}

スクロールが1画像単位でしか行えないようになっている。素早くスクロールすると delta値が 2以上になることがある。その状態が続くとインデックスを調整する処理が追いつかず、すぐに何も表示されない状態になってしまう。

原因がわかれば対処は簡単。deltaが 2以上になることを前提として、その分だけ内部処理を回すようにする。
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
 CGFloat position = scrollView.contentOffset.x / IMAGE_WIDTH;
 CGFloat delta = position - (CGFloat)leftImageIndex_;
 NSInteger count = (NSInteger)fabs(delta);

 for (int i=0; i < count; i++) {
  if (delta > 0) {
   [self scrollWithDirection:kScrollDirectionRight];
  } else {
   [self scrollWithDirection:kScrollDirectionLeft];   
  }  
 }
}

これで素早い操作に追随できないということは無くなった。

Responses

Leave a Response

人気の投稿(過去 30日間)