我正在尝试复制Android UI左右手势导航类型。这在Android Marketplace中使用,但也在iPhone +的iPhone版本中使用。
以下是我正在尝试模仿的Google+动态的YouTube链接。 http://www.youtube.com/watch?v=RYW9yxhhhPU&t=0m25s
正如您在上面的视频中看到的那样,主要观看区域顶部有一个小的滚动区域。小滚动区域保存文本“Incoming”,“Circles”,“Nearby”,并在滚动主页面时在它们之间切换。
我试图做的(失败的)是制作两个UIScrollViews。一个用于主要区域,一个用于较小区域。我将较小的UIScrollView设置为向左或向右移动主滚动视图的contentOffset.x的0.5倍。
外观有点相似,但是我很难在较小的滚动视图中获取文本标签,以便在左侧,中间和右侧位置精确排列。
我不确定这是否是正确的做法,但如果还有其他方法,我很乐意听到。
我真的很感激任何帮助!谢谢!
答案 0 :(得分:3)
我也必须为项目做这件事。我得到它主要工作。滚动时减去动画。我已经在github上开始了一个项目。我会在我去的时候添加它,但同时这应该是一个很好的跳跃点。可以在此处找到演示https://github.com/btate/BTViewPager
答案 1 :(得分:0)
我认为最好的方法是创建一个分页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);
}];
}
}
}
}
`