Paging UIScrollView with different page widths

Florian L. picture Florian L. · Feb 23, 2011 · Viewed 10.7k times · Source

I would like to have a horizontal scrolling UIScrollView with paging enabled. The pages in this scrollview have different widths, so the scrolling distance differs from page to page.

The goal is to make a picker for different points in time, e.g.:

|  Now  |  Yesterday evening |  Last Week  |  Last Month  |
    ^              ^                ^              ^           <- stopps here

Here | Now | has a smaller width than | Yesterday evening |. When paging through this values, the scrollview should stop at the center of the according value.

Is that possible?

Answer

meronix picture meronix · Feb 23, 2011

it's surely possible, but not so automatically...

i guess you should implement the UIScrollViewDelegate protocol method:

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{

}

it's the method called when the user stop to move the finger on the scrollView, you can check inside it the coordinate of your content:

yourScrollView.contentOffset

and then check which one of your page.x ( register them in an array when you create them, or check the origin of all your view added to the scrollView) is closer to it, then go to the offSet of your page (with animation) calling:

- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated