PagingEnabled只能翻過整頁,下面幾個簡單的設置便可實現ide
技術點:orm
1. 建立一個繼承UIView的視圖,並設置clipsToBounds= YES繼承
2. 添加一個UIscrollView控件,將其寬度設置爲自定義翻頁的寬度圖片
3. 設置UIScrollview 的clipsToBounds= NOip
4. 確保本View的寬度大於UIScrollView的寬度用於顯示預覽內容rem
5. 重寫本View的hittest方法,爲了確保用戶滑動UIscrollview之外的空間時也能夠觸發UIscrollview滑動it
ok! 下面是代碼,爲了方便,使用圖片做爲顯示的每一頁io
#define kLJItemWidth 240event
@implementation MyScrollview {form
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 p_w_picpathNamed: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