基本上,每一个APP都有一个轮播图的效果展示,一般都是用来展示图片的一些信息,然后可以点击查看或购买,所以在此我将这种轮播图进行了一个类的封装,效果包含两种形式:第一种,来回轮转样式,第二种,一个方向的轮转。
首先,是对效果的设计,初始化一个View图,添加相关控件
然后是对UIScrollView代理方法的使用和定时器方法的实现,同时需要添加一个通知,来记录当前显示图片的索引值
#pragma mark ------- UIScrollViewDelegate方法
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
_imgPageC.currentPage = _imgScrollV.contentOffset.x/_rectFrame.size.width;
//发射一个通知
[[NSNotificationCenter defaultCenter] postNotificationName:@"imgClickImg" object:self userInfo:@{@"imgIndex":[NSString stringWithFormat:@"%d",_imgPageC.currentPage]}];
}
#pragma mark ------- 定时器方法
-(void)imgMove
{
if ([_styleStr isEqualToString:@"1"])
{
//来回轮转
if (_imgScrollV.contentOffset.x>=_rectFrame.size.width*(_imgArray.count-1))
{
_speedI = -_rectFrame.size.width;
}
else if (_imgScrollV.contentOffset.x<=0)
{
_speedI = _rectFrame.size.width;
}
_imgScrollV.contentOffset = CGPointMake(_imgScrollV.contentOffset.x+_speedI, 0);
_imgPageC.currentPage = _imgScrollV.contentOffset.x/(_rectFrame.size.width);
}
else
{
//一个方向轮转
if (_imgScrollV.contentOffset.x>=_rectFrame.size.width*(_imgArray.count-1))
{
_imgScrollV.contentOffset = CGPointMake(0, 0);
_imgPageC.currentPage = _imgScrollV.contentOffset.x/(_rectFrame.size.width);
}
else
{
_imgScrollV.contentOffset = CGPointMake(_imgScrollV.contentOffset.x+_speedI, 0);
_imgPageC.currentPage = _imgScrollV.contentOffset.x/(_rectFrame.size.width);
}
}
//发射一个通知
[[NSNotificationCenter defaultCenter] postNotificationName:@"imgClickImg" object:self userInfo:@{@"imgIndex":[NSString stringWithFormat:@"%d",_imgPageC.currentPage]}];
}
这样一个封装好的轮播效果类,就完成了
如何进行调用?
首先导入头文件,然后创建一个数组,用来收集相关数据,同时添加一个通知
_imgArray1 = @[@"11.jpg",@"22.jpg",@"33.jpg",@"44.jpg",@"55.jpg",@"66.jpg",@"77.jpg"];
//添加一个通知,为了获取pageControl的索引值,从而获取到是哪张图
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(updateImgIndex:) name:@"imgClickImg" object:nil];
//创建初始化,参数传:1,来回轮转
HBChangeImg *hbCImg1 = [[HBChangeImg alloc] initWithFrame:CGRectMake(0, 20, f_Device_w, 200) imgArray:_imgArray1 styleStr:@"1"];
//添加手势,可以实现点击图片进入详情界面
UITapGestureRecognizer *tapGestureR = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(clickImg:)];
[hbCImg1 setUserInteractionEnabled:YES];
[hbCImg1 addGestureRecognizer:tapGestureR];
[self.view addSubview:hbCImg1];
UILabel *titleLabel1 = [[UILabel alloc] initWithFrame:CGRectMake(0, 220, f_Device_w, 30)];
titleLabel1.text = @"styleStr:1..表示来回轮转";
titleLabel1.font = [UIFont systemFontOfSize:14];
titleLabel1.textColor = [UIColor redColor];
titleLabel1.textAlignment = NSTextAlignmentCenter;
[self.view addSubview:titleLabel1];
_clickImgV = [[UIImageView alloc] initWithFrame:CGRectMake(0, 250, f_Device_w, 200)];
_clickImgV.backgroundColor = [UIColor lightGrayColor];
[self.view addSubview:_clickImgV];
然后实现相关方法:通知方法,和点击方法
这样就可以使用轮播效果的封装类
效果图:
源码下载Demo:http://download.csdn.net/detail/hbblzjy/9613022或者https://github.com/hbblzjy/ScrollViewPageDemo