调用 传入一个数组调用一下,一个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,nonatomic) UIScrollView *scrollView;
@property (strong,nonatomic) UIPageControl *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);
}
}