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