UIScrollView pagingEnabled自定义翻页宽度

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

相关文章
相关标签/搜索