6

有没有建议的方法来创建一个页面比 UISrollView 的边界更宽的分页 UIScrollView?

我需要这样的东西。

在此处输入图像描述

page2 内的正常滚动和分页模式,在页面边缘具有“橡皮筋”效果。

分页效果对我来说看起来有点复杂,如果你快速滑动你会进入下一页,如果你滑动慢你会看到新页面在边缘并且只有在某个点之后页面才会改变。

也许有人可以阐明处理这个问题的方法,这是否可能仅使用 UIScrollViewDelegate 方法或者我必须子类化?

4

3 回答 3

2

我印象深刻。这实际上比我一开始想的要容易得多。

简单的解决方案是将每个页面封装在非分页滚动视图中。并做了。无需实现 UIScrollViewDelegate,无需子类化。三行额外的代码

对于常规尺寸的页面,我有这样的东西:

UIView *myCustomView = [[[UIView alloc] initWithFrame:CGRectMake(totalWidth, 0, width, height)] autorelease];
[mainScroller addSubview:myCustomView];
totalWidth += width;

现在我有了这个:

UIView *myCustomView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, bigWidth, height)] autorelease];
UIScrollView *secondaryScroller = [[[UIScrollView alloc] initWithFrame:CGRectMake(totalWidth, 0, width, height)] autorelease];
[secondaryScroller setContentSize:myCustomView.frame.size];
[secondaryScroller addSubview:myCustomView];
[mainScroller addSubview:secondaryScroller];
totalWidth += width;

三行。惊人的。


视图层次结构:

<UIScrollView: 0x4b32eb0; frame = (0 0; 768 1004); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0x4b32d00>; contentOffset: {0, 0}>
   | <UIScrollView: 0x4b32710; frame = (0 0; 768 1004); clipsToBounds = YES; layer = <CALayer: 0x4b35580>; contentOffset: {0, 0}>
   |    | <UIView: 0x4b33f70; frame = (0 0; 1352 1004); layer = <CALayer: 0x4b16c20>>
   | <UIScrollView: 0x4b34790; frame = (768 0; 768 1004); clipsToBounds = YES; layer = <CALayer: 0x4b33e10>; contentOffset: {0, 0}>
   |    | <UIView: 0x4b30fa0; frame = (0 0; 789 1004); layer = <CALayer: 0x4b329f0>>
   | <UIScrollView: 0x4b34920; frame = (1536 0; 768 1004); clipsToBounds = YES; layer = <CALayer: 0x4b33180>; contentOffset: {0, 0}>
   |    | <UIView: 0x4b30d00; frame = (0 0; 1398 1004); layer = <CALayer: 0x4b33120>>
   | <UIScrollView: 0x4b31fe0; frame = (2304 0; 768 1004); clipsToBounds = YES; layer = <CALayer: 0x4b32170>; contentOffset: {0, 0}>
   |    | <UIView: 0x4b34c50; frame = (0 0; 863 1004); layer = <CALayer: 0x4b31f80>>
   | <UIScrollView: 0x4b32460; frame = (3072 0; 768 1004); clipsToBounds = YES; layer = <CALayer: 0x4b325f0>; contentOffset: {0, 0}>
   |    | <UIView: 0x4b323d0; frame = (0 0; 1064 1004); layer = <CALayer: 0x4b32400>>
于 2011-04-19T14:13:47.297 回答
0

据我所知,没有办法通过使用 scrollviews 分页属性直接实现这一点。

您必须实现自己的UIScrollView子类,并且在您的实现文件中,您需要实现:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
-(void)touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event; 

contentOffset使用该属性计算滚动视图滚动了多少。

并利用 UIScrollViewsscrollRectToVisible:实现您自己的自定义滚动功能。

[self scrollRectToVisible:CGRectMake(horizontalScrollAmount,virticalScrollAmount,rectWidth,rectHeight) animated:NO];

事件链类似于:记录开始触摸的位置,如果触摸移动,则通过检查其 x/y 坐标是否大于或小于其起始位置来找出它移动的方向,如果触摸在屏幕上移动了足够的量,然后使用指定的分页大小滚动视图scrollRectToVisible:

于 2011-04-18T14:37:23.987 回答
0

我使用了本教程-

http://www.edumobile.org/iphone/iphone-programming-tutorials/pagecontrol-example-in-iphone/

如果要制作更大的页面,可以在本教程中增加 PageControlExampleViewControl 的视图大小。假设将其宽度设置为 360 而不是默认的 320。

于 2011-04-18T16:07:26.273 回答