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