ScrollView有多个页面

时间:2012-10-09 04:21:38

标签: objective-c

通常,UIScrollView的教程会讨论与屏幕大小相关的多个页面。

从屏幕的第一页开始,第二页在右侧显示一点:
Ex01

滚动时,第二页也会出现同样的情况:第一页和第三页出现在左/右侧。
Ex02

这个scrollView是“可实现的”?有一种方法可以使用页面但不是整个屏幕宽度?

3 个答案:

答案 0 :(得分:0)

尝试设置滚动视图内容大小

scrollView.contentSize = CGSizeMake(W, 1);

请记住,“W”必须是一个大于滚动视图宽度的数字才能滚动水平。 1是您设置内容大小的高度的地方,如果您希望它垂直滚动,那么您的滚动视图的高度会大于“1”。

答案 1 :(得分:0)

是的,你可以这样做,只需将滚动视图的大小更改为所需的大小, 滚动视图的内容大小为(numberOfPages * width) 还启用分页

scrollView.pagingEnabled = YES;
scrollView.contentSize = CGSizeMake(numberOfPages * scrollView.frame.size.width, 1);

有关更多信息,请参阅此sample project,只需在xib中更改滚动视图大小:) 希望它有帮助:)

答案 2 :(得分:0)

您需要实现滚动视图容器(例如ScrollViewContainer)来处理-hitTest:withEvent:方法:

ScrollViewContainer.h:

@interface BookAlbumScrollViewContainer : UIView {
  UIScrollView * theScrollView_;
}

@property (nonatomic, retain) UIScrollView * theScrollView;

@end

ScrollViewContainer.m:

@implementation BookAlbumScrollViewContainer

@synthesize theScrollView = theScrollView_;

//...

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
  UIView * child = [super hitTest:point withEvent:event];
  if (child == self)
    return self.theScrollView;
  return child;
}

@end

HERE是关于-hitTest:withEvent:方法的相关质量检查。

设置滚动视图时,请将其设置为:

CGFloat yourScrollViewPageWidth = 280.f;
CGRect yourScrollViewFrame = CGRectMake((320.f - yourScrollViewPageWidth) / 2.f, 0.f, yourScrollViewPageWidth, 200.f);
CGRect theScrollViewContainerFrame = CGRectMake(0.f, 0.f, 320.f, 200.f);

// Your scroll view
yourScrollView_ = [[UIScrollView alloc] initWithFrame:yourScrollViewFrame];
//...
[self.view addSubview:bookScrollView_];

// Your scroll view container to handle touches, it should be over |yourScrollView_|
theScrollViewContainer_ = [ScrollViewContainer alloc];
[theScrollViewContainer_ initWithFrame:theScrollViewContainerFrame];
[theScrollViewContainer_ setBookAlbumScrollView:yourScrollView_];
[self.view theScrollViewContainer_];