scrollViewWillEndDragging:withVelocity:targetContentOffset: не работает по краям UISCrollView

Я пытаюсь реализовать настраиваемую панель вкладок, которая прокручивается и имеет пейджинг для каждого элемента панели вкладок. Для этого я использую делегат scrollViewWillEndDragging:withVelocity:targetContentOffset:, который отлично работает с одной проблемой.

Мой пейджинг работает следующим образом: если 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
28
задан dvieira 5 June 2012 в 14:04
поделиться