闲着没事儿,写了个iOS图片轮播,源码地址singmiya github,希望对你有所启发,如果觉得好玩的话记得star哦!
效果
demo支持如下功能
- 无限轮播
- 可自定义展示样式
- 自定义底部视图和Page Control样式
无限轮播
这个算是一个取巧,原理:把scroll view的contentSize的宽度设置的足够大,初始contentOffset的x设置为1/2 * width,这样足够保证在应用激活期间可以产生无限轮播的效果。
自定义展示样式
可以子类化ViewpagerViewCell类,自定义自己想要的样式。给自己的样式一个个性的名称放入到下面的枚举对象中。
typedef NS_ENUM(NSInteger, ViewpagerViewStyle) {
ViewpagerViewStyleDefault
};
然后在ViewPagerView初始化方法中的switch语句中加入相应的分支。
switch (_view_style) {
case ViewpagerViewStyleDefault:
_current_view_class = [ViewpagerViewCell class];
break;
default:
_current_view_class = [ViewpagerViewCell class];
break;
}
这样自定义样式就完成了。
自定义底部视图和Page Control样式
目前Page Control支持位置(左、中、右),形状(圆形、矩形),设置颜色。
typedef NS_ENUM(NSInteger, BottomViewStyle) {
// 底部视图样式 0b1111100000 == 0x03e0
BottomViewStyleDefault = 0 << 5,
// page control样式 ob111110000000000 == 0x7c00
BottomViewStylePageControlSquare = 0 << 10, // default
BottomViewStylePageControlRectangle = 1 << 10,
BottomViewStylePageControlCircle = 2 << 10,
// 0b11111000000000000000 == 0x0f8000
BottomViewStylePageControlCenter = 0 << 15, //default
BottomViewStylePageControlLeft = 1 << 15,
BottomViewStylePageControlRight = 2 << 15,
// 0b 0001 1111 0000 0000 0000 0000 0000 == 0x01f00000
BottomViewStylePageControlFeatureScale = 1 << 20
};
自定义方式可以参考上面的自定义展示样式
性能
图片内部实现借鉴了UITableView的重用机制。
用法
- 数据源格式:
NSArray *arr = @[
@{@"image":@"", @"title:@""},
@{@"image":@"", @"title":@""},
@{@"image":@"", @"title":@""}
]
其中image和title这这个key是必须的。
- 初始化代码
ViewpagerView *viewpager = [[ViewpagerView alloc] initViewpagerViewWith:CGRectMake(0, 0, SCREEN_WIDTH, self.view.bounds.size.height) dataSource:arr viewStyle:ViewpagerViewStyleDefault andBottomStyle:BottomViewStyleDefault | BottomViewStylePageControlCenter | BottomViewStylePageControlCircle];
viewpager.delegate = self;
// 设置Page Control颜色
[viewpager setPageControlDisplayColor:RGBA(29, 108, 199, 1)];
[viewpager setPageControlNormalColor:[UIColor redColor]];
[self.view addSubview:viewpager];
- 点击事件委托,遵守
ViewpagerViewDelegate
- (void)viewpagerView:(ViewpagerView *)viewpagerView didSelectPage:(NSInteger)index {
NSLog(@"xxxx %ld", index);
}