App
中不可或缺的广告轮播图组件,如今开源出来了,但愿对你们有帮助!使用过程当中有出现任何bug
,都会很快帮助解决!ios
用一个第三方库,首先须要了解这个三方库有什么特性,为何值得使用它!看看下面的说明紧!git
我相信每个想要本身写这个无限滚动显示广告图片的开发者,都会遇到这么个问题:滚动到最后一张后,再切换到第一张时怎么动画效果这么难看呢?根本就是到末尾后就直接切换到第一张,所以效果很不友好。github
HYBLoopScrollView
就很好地解决了这个问题。这个库使用了UICollectionView
的特性,很巧妙地实现了这个无限滚动的效果。api
原来我也想使用别人的开源库,可是使用起来很困难,一大堆的API
,维护起来太麻烦。所以,才决定本身写一套库来解决这个麻烦。缓存
这里提供了惟一地建立控件的方法:app
+ (instancetype)loopScrollViewWithFrame:(CGRect)frame imageUrls:(NSArray *)imageUrls timeInterval:(NSTimeInterval)timeInterval didSelect:(HYBLoopScrollViewDidSelectItemBlock)didSelect didScroll:(HYBLoopScrollViewDidScrollBlock)didScroll;
看到连同didSelect
参数和didScroll
参数了吗?前者就是点击某个广告图片时的回调block
,然后者就是滚动到某个广告时的回调,是否是很简单?oop
另外,还封装了定时器的api
,可方便地暂停或继续开启:动画
/** * Pause the timer. Usually you need to pause the timer when the view disappear. */ - (void)pauseTimer; /** * Start the timer immediately. If you has pause the timer, you may need to start * the timer again when the view appear. */ - (void)startTimer;
HYBLoadImageView类是继承于UIImageView,提供了下载图片及缓存的功能,包括获取缓存的大小、清空缓存、支持自动设置显示成圆形头像。atom
/** * @author 黄仪标 * * 此处公开此API,是方便你们能够在别的地方使用。等比例剪裁图片大小到指定的size * * @param image 剪裁前的图片 * @param size 最终图片大小 * @param isScaleToMax 是取最大比例仍是最小比例,YES表示取最大比例 * * @return 裁剪后的图片 */ + (UIImage *)clipImage:(UIImage *)image toSize:(CGSize)size isScaleToMax:(BOOL)isScaleToMax;
若是但愿将下载的图片等比例缩放为imageView的大小,则能够设置为YES:spa
/** * @author 黄仪标 * * 是否自动将下载到的图片裁剪为UIImageView的size。默认为NO。 * 若设置为YES,则在下载成功后只存储裁剪后的image */ @property (nonatomic, assign) BOOL shouldAutoClipImageToViewSize;
对于一个连接,若是下载失败了,下一次再请求时,能够再去下载一次。默认为重试2次,若是超过2次,则不会再去下载:
/** * @author 黄仪标 * * 指定URL下载图片失败时,重试的次数,默认为2次 */ @property (nonatomic, assign) NSUInteger attemptToReloadTimesForFailedURL;
内部自带了图片下载功能及图片缓存功能,而且在收到内存警告时,也会清理掉图片缓存。
说到第三方库,怎么能少了对cocoapods
的支持呢?
当前维护的版本已经到了version 3.0.0
,可经过下面的方法添加到Podfile
中:
pod "HYBLoopScrollView", '~> 3.0.0'
前一版本是2.2.5,依赖着AFNetworking这个第三方库,为了让本组件更加通用,在3.0.0版本去掉了第三方的依赖。并且在API上更加简化了,去掉了一些没必要要的API。使用起来更简单,有多简单,请看下面:
HYBLoopScrollView *loop = [HYBLoopScrollView loopScrollViewWithFrame:CGRectMake(0, 40, 320, 120) imageUrls:images timeInterval:5 didSelect:^(NSInteger atIndex) { } didScroll:^(NSInteger toIndex) { }]; loop.shouldAutoClipImageToViewSize = YES; loop.placeholder = [UIImage imageNamed:@"default.png"]; loop.alignment = kPageControlAlignRight; loop.adTitles = titles; [self.view addSubview:loop];
另外,3.0.0版本在点击轮播图和切换轮播图时不会将图片控制传回来了。只是返回图片位置。
有朋友说什么内存得不到释放的,请注意使用。看下面在block回调处,对Self是使用弱引用的,否则内存是得不到释放的。这是基本的内存循环引用问题,请你们注意:
// 请使用weakSelf,否则内存得不到释放 __weak __typeof(self) weakSelf = self; HYBLoopScrollView *loop = [HYBLoopScrollView loopScrollViewWithFrame:CGRectMake(0, 40, 320, 120) imageUrls:images timeInterval:5 didSelect:^(NSInteger atIndex) { [weakSelf dismissViewControllerAnimated:YES completion:NULL]; } didScroll:^(NSInteger toIndex) { }];
若是下载获得的图片的宽、高比与imageview的宽、高比不一样,请不要设置下面的属性,或者设置为NO(默认就是NO):
loop.shouldAutoClipImageToViewSize = NO;
若是在调试过程当中,设置了YES,发现图片未铺满整个imageview,就去掉上面设置的属性,或者设置为NO。而后记得调用清空缓存才能看到效果:
[loop clearImagesCache];
该开源库至今已经获得很多朋友的邮件反馈,才有了今天的版本。感谢全部支持个人朋友!!!
若是不想使用cocoapods
来安装,能够到github下载源代码,直接将HYBLoopScrollView
文件夹拖到工程,不须要作任何配置!!!
下载地址:HYBLoopScrollView
想了解更详细如何去使用,请阅读: