Я думаю, что лучшим подходом было бы создание подкачки UIScrollView. Затем поместите навигацию и основное содержимое UIScroll в одну UIView / страницу. Когда вы проведете пальцем, страницы будут заблокированы. Похоже, что навигация немного оживлена, но я бы предположил, что Google использовал этот подход.
Вот учебник с примером кода, который даст вам именно то, что вам нужно для просмотра с прокруткой.
http://www.iosdevnotes.com/2011/03/uiscrollview-paging/
Чтобы выполнить навигационные метки, я бы создал подкласс UIView и добавил бы представление прямо над основным видом прокрутки. Затем скажите представлению реорганизовать метки. Возможно, в `- (void) scrollViewWillBeginDecelerating: (UIScrollView *) scrollView
Вот кое-что, что я быстро написал, чтобы продемонстрировать, что я имею в виду. Это будет в подклассе UIView
- (void)addLablesForItems:(NSArray *)items
{
for (NSString *s in items)
{
UILabel *l = [[UILabel alloc] initWithFrame:CGRectZero];
l.text = s;
[self addSubview:l];
}
[self layoutSubviews];
}
- (void)layoutSubviews
{
for (UIView *l in [self subviews])
{
if ([l isKindOfClass:[UILabel class]])
{
int index = [[self subviews] indexOfObject:l];
if (index == 0)
{
l.frame = CGRectMake(0, 0, 20, 20);
}
else
{
UILabel *previousL = (UILabel *)[[self subviews] objectAtIndex:index -1];
l.frame = CGRectMake(previousL.frame.origin.x+previousL.frame.size.width, 0, 20, 20);
}
}
}
}
- (void)shiftLabels:(int)direction
{
//0 is left
//1 is right
for (UIView *l in [self subviews])
{
if ([l isKindOfClass:[UILabel class]])
{
if (direction == 0)
{
int newOrigin = l.frame.origin.x - l.frame.size.width;
if (newOrigin < 0)
{
newOrigin = self.frame.size.width - l.frame.size.width;
}
[UIView animateWithDuration:.5 animations:^{
l.frame = CGRectMake(newOrigin, 0, 20, 20);
}];
}
if (direction == 1)
{
int newOrigin = l.frame.origin.x + l.frame.size.width;
if (newOrigin < 0)
{
newOrigin = self.frame.origin.x;
}
[UIView animateWithDuration:.5 animations:^{
l.frame = CGRectMake(newOrigin, 0, 20, 20);
}];
}
}
}
}
`