0

我正在尝试创建一个“地铁”风格的 UIScrollView。它类似于 iTunes 应用程序如何处理不会命名的新 ios 版本中的面板。

我不知道如何让我的视图布局/滚动,以便显示序列中的下一个视图。我已经尝试了各种各样的方法,比如保持 contentSize 屏幕宽度,但将每个视图移动到 -10ish 上,这样它就会像上面那样显示。我尝试制作边界小于屏幕的滚动视图,以便显示下一个视图的一部分。没有任何效果。

这是我正在尝试做的图表: 在此处输入图像描述

在纸上看起来非常微不足道,但我似乎无法让它发挥作用。

4

1 回答 1

1

我不确定我是否误解了您的要求 - 但这可能是了解如何设置它的起点:

- (void)viewDidLoad
{
  [super viewDidLoad];

  CGRect viewBounds      = self.view.bounds;
  CGRect scrollViewFrame = CGRectMake(0, 0, floorf(CGRectGetWidth(viewBounds) / 2.2), CGRectGetHeight(viewBounds));
  UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:scrollViewFrame];

  scrollView.center        = self.view.center;
  scrollView.contentSize   = CGSizeMake(CGRectGetWidth(viewBounds) * 3, CGRectGetHeight(viewBounds) * 3);
  scrollView.pagingEnabled = YES;
  scrollView.clipsToBounds = NO;

  UIPanGestureRecognizer *gestureRecognizer = scrollView.panGestureRecognizer;
  [self.view addGestureRecognizer:gestureRecognizer];

  for (int i = 0; i < 3; i++) {
    CGRect frame = CGRectMake(10.f + (i * CGRectGetWidth(scrollView.bounds)), 10.f, CGRectGetWidth(scrollView.bounds) - 20.f, (CGRectGetHeight(scrollViewFrame) * 3) - 20.f);
    UIView *view = [[UIView alloc] initWithFrame:frame];
    view.backgroundColor = [UIColor redColor];
    [scrollView addSubview:view];
  }

  [self.view addSubview:scrollView];
}

从字面上看,只是把它放在一个空的 viewController 中viewDidLoad:

需要注意的关键事项是

  • contentSize需要足够宽以容纳所有面板
  • clipsToBounds应该是NO这样你就可以看到额外的视图
  • 滚动视图的边界本质上是主视图端口
  • pagingEnabled应该设置
  • 我已经panGestureRecognizer从滚动视图中抓取并将其附加到包含视图,以便在包含视图的边界(更大)中检测到平移,否则您只能检测滚动视图边界内的滚动
于 2012-09-14T22:27:58.107 回答