iphone - 如何创建具有 "oversized"页面的分页UIScrollView

标签 iphone uiscrollview uiscrollviewdelegate

是否有建议的方法来创建页面比 UISrollView 边界更宽的分页 UIScrollView?

我需要这样的东西。

enter image description here

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

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

也许有人可以阐明处理此问题的方法,仅使用 UIScrollViewDelegate 方法是否可以实现这一点,还是我必须子类化?

最佳答案

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

简单的解决方案是将每个页面封装在非分页 ScrollView 中。并做了。无需实现 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;

三行。太棒了。

<小时/>

View 层次结构:

<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>>

关于iphone - 如何创建具有 "oversized"页面的分页UIScrollView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5704138/

相关文章:

ios - 如何从 NSOperations 收集数据到数组中?

iphone - 如何根据 NSArray 中自定义对象的日期进行排序...?

iphone - 在 iPhone 游戏中使用矢量图形

objective-c - 页面控制按钮

ios - 触摸 UIScrollView 时应用程序崩溃

iphone - 应用程序崩溃,不知道为什么

objective-c - iphone - 防止uiscrollview通过触摸滚动

swift - 在与 View 快速不匹配的 ScrollView 中以编程方式垂直居中 UILabel

iphone - UIScrollView 委托(delegate)方法冲突

swift - 我的 ScrollView 没有垂直滚动