美文网首页iOSios第三方资源程序员
最简单方便的iOS轮播开源库:JYCarousel

最简单方便的iOS轮播开源库:JYCarousel

作者: Dely | 来源:发表于2016-11-18 12:07 被阅读3902次

前言

最近林丹出轨的事件占据头条。其实圈内的事就那么回事吧,我们平时身边这种事情也很多,只是我们不是公众人物,就算有也不会很多人知道。还是找个程序猿当老公好啊,绝对不会出轨哦。如果凌晨3点你老公还没回家,那他准是在写代码,我为我自己代言_

今天我要推荐一个轮播开源库JYCarousel。如果中间使用过程中有任何的问题可以联系我,我会尽快处理解决,给你们一个简单方便的使用体验。

轮播组件:JYCarousel

开源库名称: JYCarousel

开源库当前版本: 0.0.1

开源库github地址:https://github.com/Delyer/JYCarousel

开源库简介: 这是一个使用起来非常简单的开源轮播库,自带下载和缓存,不会造成循环引用,不用考虑定时器不会销毁(我都已经帮你做好了)。

JYCarouselIcon.png

1. JYCarousel 使用方式

  • 1.直接下载工程,把包含源代码的文件夹JYCarousel引入工程即可使用

  • 2.支持cocoapods。当前版本0.0.1 在Podfile文件中添加以下文字即可:

pod 'JYCarousel', '~> 0.0.1'
当前版本0.0.1.png

2. 轮播基本原理

使用三个imageView添加到ScrollView,始终保持中间的imageView在可视界面里。当前的imageView滚动到下一个imageView,然后把下一个imageView滚动到三个imageView的中心位置,在这过程中赋值的时候是三个imageView同时赋值,滚动的时候找到最中间的imageView,把这个imageView的tag值设置为当前的索引,滚动完成后把这个imageView设置为中心滚动位置。

比如三张图A、B、C。要做的scrollview实际上应该是五张的大小顺序是C、A、B、C、A。初始偏移量设置到第二张,监听scrollview滑动事件。判断偏移量。当偏移量在第一张时将偏移量修改到第四张,当偏移量在第五张时将偏移量调整到第二章。这样在循环时比较流畅,才能无缝无限循环滚动

JYCarouselAnimation.gif

3. 轮播的特性

  • 无缝循环轮播,处理的很好,不会显得生硬

  • 自带图片下载和缓存,不依赖任何第三方,引入即可使用,不用任何配置

  • 支持block方式和delegate方式,使用起来巨方便

  • 随时根据需要清除缓存

  • 采用disk缓存,不会占用app内存,释放你的app内存

  • 可以随时更新轮播数据,完美切换,[carouselView startCarouselWithArray:imageArray];

  • 用户可自定义的属性多,具体见配置文件JYConfiguration

  • 支持轮播翻页的各种动画

4. 代码文件结构和功能

JYCarousel

  • JYCarousel
    • 作用:轮播组件的创建和开始
  • JYConfiguration
    • 作用:轮播组件的自定义配置,配置你想要的效果
  • JYPageControl
    • 作用:轮播组件的指示器样式
  • JYWeakTimer
    • 作用:轮播组件的弱引用定时器,解决NSTimer不能销毁的问题
  • UIImageView+JYImageViewManager
    • 作用:imageView请求网络图片的分类
  • JYImageDownloader
    • 作用:请求网络图片
  • JYImageCache
    • 作用:网络图片的缓存
  • JYCarouselAnimation
    • 作用:轮播翻页的效果动画
JYCarouselStruct.png

5. 轮播组件的使用

提供两个初始化方法:

/**
 block方式回调初始化
 @param frame       frame
 @param configBlock 轮播属性配置
 @param clickBlock  点击回调
 @return carousel
 */
- (instancetype)initWithFrame:(CGRect)frame
                  configBlock:(CarouselConfigurationBlock)configBlock
                   clickBlock:(CarouselClickBlock)clickBlock;


/**
 delegate方式回调初始化
 @param frame       frame
 @param configBlock 轮播属性配置
 @param target      delegate
 @return carousel
 */
- (instancetype)initWithFrame:(CGRect)frame
                  configBlock:(CarouselConfigurationBlock)configBlock
                       target:(id<JYCarouselDelegate>)target;

使用举例:

1.block回调方式创建:
- (void)addCarouselView1{
    __weak typeof(self) weakSelf = self;
    //图片数组(或者图片URL,图片URL字符串,图片UIImage对象)
    NSMutableArray *imageArray = [[NSMutableArray alloc] initWithArray: @[@"1.jpg",@"2.jpg",@"3.jpg",@"4.jpg"]];
   JYCarousel *carouselView = [[JYCarousel alloc] initWithFrame:CGRectMake(0, 64, ViewWidth(self.view), 100) configBlock:^JYConfiguration *(JYConfiguration *carouselConfig) {          
         //配置指示器类型
        carouselConfig.pageContollType = LabelPageControl;
        //配置轮播时间间隔
        carouselConfig.interValTime = 3;
        //配置轮播翻页动画
        carouselConfig.pushAnimationType = PushCube;
        //配置动画方向
        carouselConfig.animationSubtype = kCATransitionFromRight;
        return carouselConfig;
    } clickBlock:^(NSInteger index) {
          //点击imageView回调方法
        [weakSelf clickIndex:index];
    }];
    //开始轮播
    [carouselView startCarouselWithArray:imageArray];
    [self.view addSubview:carouselView];
}
2.delegate回调方式创建:
//遵循协议
@interface SubViewController ()<JYCarouselDelegate>

//创建
- (void)addCarouselView{
    NSMutableArray *imageArray = [[NSMutableArray alloc] initWithArray: @[@"1.jpg",@"2.jpg",@"3.jpg",@"4.jpg"]];
    
    JYCarousel *carouselView = [[JYCarousel alloc] initWithFrame:CGRectMake(0, 540, ViewWidth(self.view), 100) configBlock:^JYConfiguration *(JYConfiguration *carouselConfig) {
        carouselConfig.pageContollType = LeftPageControl;
        carouselConfig.interValTime = 3.0;
        carouselConfig.pushAnimationType = PushCameraIrisHollowOpen;
        carouselConfig.backViewImage = [UIImage imageNamed:@"default"];
        return carouselConfig;
    } target:self];
    
    //开始轮播
    [carouselView startCarouselWithArray:imageArray];
    [self.view addSubview:carouselView];
}

//回调方法
- (void)carouselViewClick:(NSInteger)index{
    NSLog(@"代理方式你点击图片索引index = %ld",index);
    //清楚缓存数据 可以在app启动的时候清楚上一次轮播缓存,根据自己需要
    [[JYImageCache sharedImageCache] jy_clearDiskCaches];
}

6. 注意事项

内存得不到释放造成内存泄露,使用循环引用了。请注意使用。看下面在block回调处,对Self是使用弱引用的,不然内存是得不到释放的。
<pre>
// 请使用weakSelf,不然内存得不到释放
__weak typeof(self) weakSelf = self;
//图片数组(或者图片URL,图片URL字符串,图片UIImage对象)
NSMutableArray *imageArray = [[NSMutableArray alloc] initWithArray: @[@1.jpg,@2.jpg,@3.jpg,@4.jpg]];
JYCarousel *carouselView = [[JYCarousel alloc] initWithFrame:CGRectMake(0, 64, ViewWidth(self.view), 100) configBlock:nil clickBlock:NSInteger index {
//点击imageView回调方法
[weakSelf clickIndex:index];
}];
//开始轮播
[carouselView startCarouselWithArray:imageArray];
[self.view addSubview:carouselView];
</pre>

7. 下个版本预告

  • 添加启动超时自动清除缓存功能
  • 添加titlLabel标签等

喜欢就给个Star吧!

相关文章

网友评论

  • iOSCoder:楼主,这个可以设置默认图片吗?比如当图片加载不出来的时候显示或者是网络慢刚加载时显示默认图片
  • wellyoung:博主你好,用代理回调方式创建后而当图片只有一个时,走代理方法- (void)carouselViewClick:(NSInteger)index 里的 index 会变为-1,忘博主修复。
    Dely:@wellyoung 我看下会尽快修复。谢谢指出:blush:
  • 羊肉泡馍啊:有何图片对应的文字轮播吗?
  • 6e983a24add8:楼主,你的titlLabel标签呢:no_mouth:
  • 风见隼人Akf:是否能支持下拉时图片拉伸~
    Dely:@风见隼人Akf 暂时没有,会一直维护更新新功能 :smiley:
  • ios肖:我就喜欢这样的大牛,造福大众
    Dely:@ios肖 共同进步 :smile:
  • 水户洋平_Psist:你身边都是什么人。。。楼主兄弟 这个图片直接切换有效果可以设置吗,比如渐变或者缓慢过渡类型的。
    Dely:@水户洋平_Psist https://github.com/Delyer/JYCarousel,文章首页就有 :smile:
    水户洋平_Psist:@Dely 哦哦 github的链接有吗
    Dely:@水户洋平_Psist 我身边是一群男人。。。。图片切换有渐变的哦,如果需要各种效果我会慢慢添加优化。。。。。。 :smile:
  • Purlible:看了序我就迫不及待的来评论了,大兄弟,你确定凌晨三四点还没回家的程序员一定,真的在写代码嘛…:stuck_out_tongue_winking_eye::joy::joy::joy::joy:
    Dely:@Dalvk丶藏蓝 我是单纯的:relieved:
    Never_Yg:@Dalvk丶藏蓝 一定是在和测试妹子聊骚
  • 橡树fulen:666
    Dely:@橡树fulen 999我感冒了

本文标题:最简单方便的iOS轮播开源库:JYCarousel

本文链接:https://www.haomeiwen.com/subject/vegjpttx.html