スクロール可能で、各タブバーアイテムにページングがあるカスタムタブバーを実装しようとしています。そのために、デリゲートscrollViewWillEndDragging:withVelocity:targetContentOffset:を使用しています。これは1つの問題で完全に機能します。
私のページングの仕組みは、contentOffsetが適切なアイテムの近くにある場合、targetContentOffsetがそのアイテムのオフセットに変更されることです。左側も同じです。
問題は、最初のアイテムの左半分と最後のアイテムの右半分にいるときはいつでも(スクロールビューは水平方向に機能します)、ContentOffset 0と右端のアイテムのコンテンツオフセット(上のアイテムを除く)に移動することになっていることです。画面)、しかし、そうではありません。
デバッガーで確認したところ、targetContentOffset-> xは実際に0です(最初のケースでは、左端の項目の左側)。したがって、問題はUIScrollViewがそこでスクロールしないことです。道に迷いました。
これが私の実装されたデリゲートです:
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView
withVelocity:(CGPoint)velocity
targetContentOffset:(inout CGPoint *)targetContentOffset{
NSInteger index = lrintf(targetContentOffset->x/self.tabWidth);
targetContentOffset->x = index * self.tabWidth;
}
これが私がやりたいことを説明する図です。
|-------|-------|-------|-------|-------|-------|-------|
| | | | | | | |
| | | | | | | |
|_______|_______|_______|_______|_______|_______|_______|
|_______________________________________|
where it is and i scroll it to the left
<----|
|_______________________________________|
where it would stop
|_______________________________________|
where i want it to stop