iOS图片轮播

480 阅读2分钟

闲着没事儿,写了个iOS图片轮播,源码地址singmiya github,希望对你有所启发,如果觉得好玩的话记得star哦!

效果

demo支持如下功能

  1. 无限轮播
  2. 可自定义展示样式
  3. 自定义底部视图和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的重用机制。

用法

  1. 数据源格式:
NSArray *arr = @[
				@{@"image":@"", @"title:@""}, 
				@{@"image":@"", @"title":@""}, 
				@{@"image":@"", @"title":@""}
				]

其中image和title这这个key是必须的。

  1. 初始化代码
    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];
  1. 点击事件委托,遵守ViewpagerViewDelegate
- (void)viewpagerView:(ViewpagerView *)viewpagerView didSelectPage:(NSInteger)index {
    NSLog(@"xxxx %ld", index);
}