IOS 滚动视图加点击事件的封装

调用 传入一个数组调用一下,一个block调用搞定

 NSArray * imageArray=@[@"2_1",@"2_2",@"2_3",@"2_4",@"2_5"];

    ScrollImageView * headView=[[ScrollImageViewalloc]initWithScreatScrollImageView:CGRectMake(0,0,SCREEN_WIDTH,160)andArray:imageArray];

    headView.imageBlock=^(NSInteger tapTag)

    {

        for (int i=0; i<imageArray.count; i++) {

            if (tapTag-1000==i) {

                UIAlertView * allerView=[UIAlertViewshowAlertViewWithTitle:@"温馨提示"message:[NSStringstringWithFormat:@"%d",i]cancelButtonTitle:@"取消"otherButtonTitles:@[@"确定"]onDismiss:^(long buttonIndex) {

                    NSLog(@"确定");

                } onCancel:^{

                    NSLog(@"取消");

                }];

                [allerView show];

            }

        }

        

    };

.h文件中

@property(nonatomic,strong)void (^imageBlock)(NSInteger  tap);

-(id)initWithScreatScrollImageView:(CGRect)frame  andArray:(NSArray*)imageArray;


.m文件中

@interface ScrollImageView()<UIScrollViewDelegate>

@property (strong,nonatomicUIScrollView *scrollView;



@property (strong,nonatomicUIPageControl *PageCollor;


@property(nonatomic,strong)NSTimer*timer;


@property(nonatomic,strong)ScrollImageView *headerView;


@property(nonatomic,strong)NSArray * imageArray;


@end

@implementation ScrollImageView


/*

*/

-(id)initWithScreatScrollImageView:(CGRect)frame  andArray:(NSArray*)imageArray

{

    self = [superinit];

    if (self) {

        self.imageArray=[NSArrayarray];

        self.imageArray=imageArray;

        [selfcreateScrollView:frame];

    }

    returnself;

}



-(void)scrollViewDidScroll:(UIScrollView *)scrollView{

    //获取偏移量

    CGFloat offsetX=scrollView.contentOffset.x;

    //保证偏移一半的时候就能显示另一页

    offsetX=offsetX+(SCREEN_WIDTH)/2;

    //用偏移量除以一张图片的宽度等于当前显示的第几张

    int page =offsetX/SCREEN_WIDTH;

    //设置当前的页面给指示器当前的页码

    self.PageCollor.currentPage=page;

    // NSLog(@"滚起来!!");

    

}

//即将开始拖拽

-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{

    //调用invalidate一旦停止计时,计时器就废了

    [self.timerinvalidate];

    

    self.timer=nil;

    

    //将定时器抛向遥远的未来

    

    //[_timer setFireDate:[NSDate distantFuture]];

    

}

//拖拽完毕

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate

{

    self.timer =[NSTimerscheduledTimerWithTimeInterval:2.0target:selfselector:@selector(scrollImage)userInfo:nilrepeats:YES];

    //再次创建timer的优先级

    //设置self.timer的优先级和控件的优先级一样高

    //获取当前的消息循环对象

    NSRunLoop*runLoop=[NSRunLoopcurrentRunLoop];

    [runLoop addTimer:self.timerforMode:NSRunLoopCommonModes];

    

}

-(void)createScrollView:(CGRect)frame{

    self.scrollView=[[UIScrollViewalloc]init];

    self.PageCollor=[[UIPageControlalloc]init];

    CGFloat imageH=160;

    CGFloat imageW=SCREEN_WIDTH;

    CGFloat imageY=0;

    for (int i=0; i<self.imageArray.count; i++) {

        UIImageView*imageVige=[[UIImageViewalloc]init];

//如果是网络图片的话 以下两句话应该改一下 传进来的数组为链接形式

        NSString*imageName=[[NSStringalloc]initWithFormat:@"%@.png",[self.imageArrayobjectAtIndex:i]];

        imageVige.image=[UIImageimageNamed:imageName];

        CGFloat imageX=i*imageW;

        imageVige.frame=CGRectMake(imageX, imageY, imageW, imageH);

        imageVige.tag=1000+i;

        imageVige.userInteractionEnabled=YES;

        UITapGestureRecognizer * tap=[[UITapGestureRecognizeralloc]initWithTarget:selfaction:@selector(scrollViewClick:)];

//        tap.numberOfTapsRequired=1000+i;

        [imageVige addGestureRecognizer:tap];

        [ self.scrollViewaddSubview:imageVige];

    }

    self.frame=frame;

    //demo中不小心设置成了死值  下载demo的人请改成下边一句 谢谢

    CGFloat MaxW=SCREEN_WIDTH*self.imageArray.count;

    self.scrollView.frame=frame;

    self.PageCollor.frame=CGRectMake(SCREEN_WIDTH/3*2,160*4/5,100,30);

    self.PageCollor.pageIndicatorTintColor=[UIColorwhiteColor];

    self.PageCollor.currentPageIndicatorTintColor=[UIColorredColor];

    self.scrollView.contentSize=CGSizeMake(MaxW,0);

    //实现scrollview的分页效果吗

    self.scrollView.pagingEnabled=YES;

    //显示水平播放器吗

    self.scrollView.showsHorizontalScrollIndicator=NO;

    self.PageCollor.numberOfPages=self.imageArray.count;

    self.PageCollor.currentPage=0;

    self.timer=[NSTimerscheduledTimerWithTimeInterval:1.0target:selfselector:@selector(scrollImage)userInfo:nilrepeats:YES];

    //设置self.timer的优先级和控件的优先级一样高

    //获取当前的消息循环对象

    NSRunLoop*runLoop=[NSRunLoopcurrentRunLoop];

    [runLoop addTimer:self.timerforMode:NSRunLoopCommonModes];

    self.scrollView.delegate=self;

    [selfaddSubview:self.scrollView];

    [selfaddSubview:self.PageCollor];

    [selfbringSubviewToFront:self.PageCollor];

}

//滚动事件的方法

-(void)scrollImage

{

    NSInteger page=self.PageCollor.currentPage;

    if (page==self.PageCollor.numberOfPages-1) {

        page=0;

    }else{

        page++;

    }

    CGFloat offSetX=page*self.scrollView.frame.size.width;

    [self.scrollViewsetContentOffset:CGPointMake(offSetX,0)animated:YES];

}

//block方法

-(void)scrollViewClick:(UITapGestureRecognizer*)tap

{

//取到点击手势视图的tag值

    NSInteger tapTag= [[tapview]tag];

    if (tap) {

        self.imageBlock(tapTag);

    }


}

Demo下载地址    http://download.csdn.net/detail/bddzzw/9612946

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值