是否有建议的方式来创建页面比UISrollView的边界更宽的分页UIScrollView?如何用“超大”页面创建分页UIScrollView
我需要这样的东西。内第2页和寻呼模式
正常滚动与在页面上的边缘上的“橡皮”的效果。
对于我来说,分页效果看起来有点复杂,如果你快速地轻弹你转到下一页,如果你慢地滑动,你会在边缘看到新的页面,并且只有在某个点后页面被改变。
也许有人可以阐明处理这个问题的方法,这是甚至可能的唯一使用UIScrollViewDelegate方法或我必须继承?
是否有建议的方式来创建页面比UISrollView的边界更宽的分页UIScrollView?如何用“超大”页面创建分页UIScrollView
我需要这样的东西。内第2页和寻呼模式
正常滚动与在页面上的边缘上的“橡皮”的效果。
对于我来说,分页效果看起来有点复杂,如果你快速地轻弹你转到下一页,如果你慢地滑动,你会在边缘看到新的页面,并且只有在某个点后页面被改变。
也许有人可以阐明处理这个问题的方法,这是甚至可能的唯一使用UIScrollViewDelegate方法或我必须继承?
我留下了深刻的印象。这实际上比我在一开始想的要容易得多。
简单的解决方案是将每个页面封装在非分页滚动视图中。并做了。无需实现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>>
据我所知,没有办法通过使用scrollviews分页属性直接实现这一点。
你将不得不实现自己的UIScrollView
子类,您的实现文件中,你需要实现:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
-(void)touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event;
工作了多少滚动视图已使用contentOffset
财产滚动。
并利用UIScrollViews的scrollRectToVisible:
来实现您自己的自定义滚动功能。
[self scrollRectToVisible:CGRectMake(horizontalScrollAmount,virticalScrollAmount,rectWidth,rectHeight) animated:NO];
事件链会是这样的:记录起始触摸的位置,如果移动触摸屏,找出它通过检查,看看它的x/y坐标移动的方向是大于或小于如果触摸在屏幕上移动了足够的数量,则使用scrollRectToVisible:
以指定的分页尺寸滚动视图。
我用这个教程 -
http://www.edumobile.org/iphone/iphone-programming-tutorials/pagecontrol-example-in-iphone/
如果你想使一个较大的页面,你可以增加视PageControlExampleViewControl的大小在本教程中。可以说,使其宽度为360而不是默认320.