用到UIScrollview的翻页效果时,有时需要显示一部分左右的内容,但是UIScrollView的PagingEnabled只能翻过整页,下面几个简单的设置即可实现
技术点:
1. 创建一个继承UIView的视图,并设置clipsToBounds= YES
2. 添加一个UIscrollView控件,将其宽度设置为自定义翻页的宽度
3. 设置UIScrollview 的clipsToBounds= NO
4. 确保本View的宽度大于UIScrollView的宽度用于显示预览内容
5. 重写本View的hittest方法,为了确保用户滑动UIscrollview以外的空间时也可以触发UIscrollview滑动
ok! 下面是代码,为了方便,使用图片作为显示的每一页
#define kLJItemWidth 240 @implementation MyScrollview { UIScrollView *scrollview; } - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { scrollview = ({ UIScrollView *scroll = [[UIScrollView alloc] initWithFrame:CGRectMake(40, 0, kLJItemWidth, frame.size.height)]; scroll.pagingEnabled = YES; scroll.clipsToBounds = NO; scroll; }) ; [self addSubview:scrollview]; self.clipsToBounds = YES; } return self; } -(void)loadImages:(NSArray *)array{ int index = 0; [scrollview.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; for(NSString * name in array){ UIImageView *iv = [[UIImageView alloc] initWithImage:[UIImage imageNamed:name]]; iv.contentMode = UIViewContentModeScaleToFill; CGRect fra = iv.frame; fra.size.width = kLJItemWidth; fra.origin.x = index * kLJItemWidth; iv.frame = fra; [scrollview addSubview:iv]; index++; } scrollview.contentSize = CGSizeMake(scrollview.frame.size.width*index, scrollview.frame.size.height); } - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { UIView *view = [super hitTest:point withEvent:event]; if ([view isEqual:self]) { for (UIView *subview in scrollview.subviews) { CGPoint offset = CGPointMake(point.x - scrollview.frame.origin.x + scrollview.contentOffset.x - subview.frame.origin.x, point.y - scrollview.frame.origin.y + scrollview.contentOffset.y - subview.frame.origin.y); if ((view = [subview hitTest:offset withEvent:event])) { return view; } } return scrollview; } return view; } @end