念のため実機で確認したところ、素早くスクロールさせると何も表示されず真っ黒になることがわかった。
原因はこれ。
- (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