Mobile Safari允许您通过进入一种底部带有页面控件的UIScrollView水平分页视图来切换页面.
我试图复制这种特殊的行为,即水平滚动的UIScrollView显示下一个视图的一些内容.
Apple提供的示例:PageControl展示了如何使用UIScrollView进行水平分页,但所有视图都占据整个屏幕宽度.
如何获得UIScrollView,以便像mobile Safari那样显示下一个视图的某些内容?
Mobile Safari允许您通过进入一种底部带有页面控件的UIScrollView水平分页视图来切换页面.
我试图复制这种特殊的行为,即水平滚动的UIScrollView显示下一个视图的一些内容.
Apple提供的示例:PageControl展示了如何使用UIScrollView进行水平分页,但所有视图都占据整个屏幕宽度.
如何获得UIScrollView,以便像mobile Safari那样显示下一个视图的某些内容?
启用分页的UIScrollView
将在其帧宽度(或高度)的倍数处停止.所以第一步是弄清楚你想要你的页面有多宽.就让它和UIScrollView
号一样宽吧.然后,将子视图的大小设置为您需要的大小,并根据UIScrollView
宽度的倍数设置它们的中心.
然后,既然您想要查看其他页面,当然可以按照mhjoy所述将clipsToBounds
设置为NO
.现在的诀窍部分是当用户开始拖动到UIScrollView
的帧范围之外时使其滚动.我的解决方案(当我最近不得不这么做的时候)是这样的:
创建一个包含UIScrollView
及其子视图的UIView
子类(即ClipView
).基本上,它应该有一个框架,你会认为UIScrollView
在正常情况下会有.将UIScrollView
放置在ClipView
的中心.如果ClipView
的宽度小于其父视图的宽度,请确保ClipView
的clipsToBounds
设置为YES
.此外,ClipView
需要引用UIScrollView
.
最后一步是覆盖ClipView
内部的- (UIView *)hitTest:withEvent:
.
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
return [self pointInside:point withEvent:event] ? scrollView : nil;
}
这基本上将UIScrollView
的touch 区域扩展到其父视图的框架,这正是您需要的.
另一种 Select 是子类UIScrollView
并覆盖它的- (BOOL)pointInside:(CGPoint) point withEvent:(UIEvent *) event
方法,但是您仍然需要一个容器视图来进行裁剪,并且可能很难仅根据UIScrollView
的帧来确定何时返回YES
.
NOTE: You should also take a look at Juri Pakaste's 100 if you are having issues with subview user interaction.