前言
最近林丹出軌的事件占據(jù)頭條验残。其實(shí)圈內(nèi)的事就那么回事吧,我們平時(shí)身邊這種事情也很多巾乳,只是我們不是公眾人物您没,就算有也不會(huì)很多人知道。還是找個(gè)程序猿當(dāng)老公好啊想鹰,絕對(duì)不會(huì)出軌哦紊婉。如果凌晨3點(diǎn)你老公還沒(méi)回家药版,那他準(zhǔn)是在寫(xiě)代碼辑舷,我為我自己代言_
今天我要推薦一個(gè)輪播開(kāi)源庫(kù)JYCarousel。如果中間使用過(guò)程中有任何的問(wèn)題可以聯(lián)系我槽片,我會(huì)盡快處理解決何缓,給你們一個(gè)簡(jiǎn)單方便的使用體驗(yàn)。
輪播組件:JYCarousel
開(kāi)源庫(kù)名稱(chēng): JYCarousel
開(kāi)源庫(kù)當(dāng)前版本: 0.0.1
開(kāi)源庫(kù)github地址:https://github.com/Delyer/JYCarousel
開(kāi)源庫(kù)簡(jiǎn)介: 這是一個(gè)使用起來(lái)非常簡(jiǎn)單的開(kāi)源輪播庫(kù)还栓,自帶下載和緩存碌廓,不會(huì)造成循環(huán)引用,不用考慮定時(shí)器不會(huì)銷(xiāo)毀(我都已經(jīng)幫你做好了)剩盒。
1. JYCarousel 使用方式
1.直接下載工程谷婆,把包含源代碼的文件夾JYCarousel引入工程即可使用
2.支持cocoapods。當(dāng)前版本0.0.1 在Podfile文件中添加以下文字即可:
pod 'JYCarousel', '~> 0.0.1'
2. 輪播基本原理
使用三個(gè)imageView添加到ScrollView辽聊,始終保持中間的imageView在可視界面里纪挎。當(dāng)前的imageView滾動(dòng)到下一個(gè)imageView,然后把下一個(gè)imageView滾動(dòng)到三個(gè)imageView的中心位置跟匆,在這過(guò)程中賦值的時(shí)候是三個(gè)imageView同時(shí)賦值异袄,滾動(dòng)的時(shí)候找到最中間的imageView烤蜕,把這個(gè)imageView的tag值設(shè)置為當(dāng)前的索引,滾動(dòng)完成后把這個(gè)imageView設(shè)置為中心滾動(dòng)位置虎忌。
比如三張圖A呐籽、B蚀瘸、C贮勃。要做的scrollview實(shí)際上應(yīng)該是五張的大小順序是C、A奏瞬、B硼端、C寓搬、A。初始偏移量設(shè)置到第二張镣典,監(jiān)聽(tīng)scrollview滑動(dòng)事件兄春。判斷偏移量赶舆。當(dāng)偏移量在第一張時(shí)將偏移量修改到第四張祭饭,當(dāng)偏移量在第五張時(shí)將偏移量調(diào)整到第二章。這樣在循環(huán)時(shí)比較流暢夕晓,才能無(wú)縫無(wú)限循環(huán)滾動(dòng)
3. 輪播的特性
無(wú)縫循環(huán)輪播蒸辆,處理的很好,不會(huì)顯得生硬
自帶圖片下載和緩存谆奥,不依賴(lài)任何第三方酸些,引入即可使用檐蚜,不用任何配置
支持block方式和delegate方式,使用起來(lái)巨方便
隨時(shí)根據(jù)需要清除緩存
采用disk緩存闯第,不會(huì)占用app內(nèi)存,釋放你的app內(nèi)存
可以隨時(shí)更新輪播數(shù)據(jù)填帽,完美切換,
[carouselView startCarouselWithArray:imageArray];
用戶(hù)可自定義的屬性多篡腌,具體見(jiàn)配置文件JYConfiguration
支持輪播翻頁(yè)的各種動(dòng)畫(huà)
4. 代碼文件結(jié)構(gòu)和功能
JYCarousel
-
JYCarousel
- 作用:輪播組件的創(chuàng)建和開(kāi)始
-
JYConfiguration
- 作用:輪播組件的自定義配置嘹悼,配置你想要的效果
-
JYPageControl
- 作用:輪播組件的指示器樣式
-
JYWeakTimer
- 作用:輪播組件的弱引用定時(shí)器绘迁,解決NSTimer不能銷(xiāo)毀的問(wèn)題
-
UIImageView+JYImageViewManager
- 作用:imageView請(qǐng)求網(wǎng)絡(luò)圖片的分類(lèi)
-
JYImageDownloader
- 作用:請(qǐng)求網(wǎng)絡(luò)圖片
-
JYImageCache
- 作用:網(wǎng)絡(luò)圖片的緩存
-
JYCarouselAnimation
- 作用:輪播翻頁(yè)的效果動(dòng)畫(huà)
5. 輪播組件的使用
提供兩個(gè)初始化方法:
/**
block方式回調(diào)初始化
@param frame frame
@param configBlock 輪播屬性配置
@param clickBlock 點(diǎn)擊回調(diào)
@return carousel
*/
- (instancetype)initWithFrame:(CGRect)frame
configBlock:(CarouselConfigurationBlock)configBlock
clickBlock:(CarouselClickBlock)clickBlock;
/**
delegate方式回調(diào)初始化
@param frame frame
@param configBlock 輪播屬性配置
@param target delegate
@return carousel
*/
- (instancetype)initWithFrame:(CGRect)frame
configBlock:(CarouselConfigurationBlock)configBlock
target:(id<JYCarouselDelegate>)target;
使用舉例:
1.block回調(diào)方式創(chuàng)建:
- (void)addCarouselView1{
__weak typeof(self) weakSelf = self;
//圖片數(shù)組(或者圖片URL,圖片URL字符串哮奇,圖片UIImage對(duì)象)
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) {
//配置指示器類(lèi)型
carouselConfig.pageContollType = LabelPageControl;
//配置輪播時(shí)間間隔
carouselConfig.interValTime = 3;
//配置輪播翻頁(yè)動(dòng)畫(huà)
carouselConfig.pushAnimationType = PushCube;
//配置動(dòng)畫(huà)方向
carouselConfig.animationSubtype = kCATransitionFromRight;
return carouselConfig;
} clickBlock:^(NSInteger index) {
//點(diǎn)擊imageView回調(diào)方法
[weakSelf clickIndex:index];
}];
//開(kāi)始輪播
[carouselView startCarouselWithArray:imageArray];
[self.view addSubview:carouselView];
}
2.delegate回調(diào)方式創(chuàng)建:
//遵循協(xié)議
@interface SubViewController ()<JYCarouselDelegate>
//創(chuàng)建
- (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];
//開(kāi)始輪播
[carouselView startCarouselWithArray:imageArray];
[self.view addSubview:carouselView];
}
//回調(diào)方法
- (void)carouselViewClick:(NSInteger)index{
NSLog(@"代理方式你點(diǎn)擊圖片索引index = %ld",index);
//清楚緩存數(shù)據(jù) 可以在app啟動(dòng)的時(shí)候清楚上一次輪播緩存,根據(jù)自己需要
[[JYImageCache sharedImageCache] jy_clearDiskCaches];
}
6. 注意事項(xiàng)
內(nèi)存得不到釋放造成內(nèi)存泄露,使用循環(huán)引用了辩涝。請(qǐng)注意使用∽叫希看下面在block回調(diào)處,對(duì)Self是使用弱引用的宠进,不然內(nèi)存是得不到釋放的藐翎。
<pre>
// 請(qǐng)使用weakSelf,不然內(nèi)存得不到釋放
__weak typeof(self) weakSelf = self;
//圖片數(shù)組(或者圖片URL堤器,圖片URL字符串吼旧,圖片UIImage對(duì)象)
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 {
//點(diǎn)擊imageView回調(diào)方法
[weakSelf clickIndex:index];
}];
//開(kāi)始輪播
[carouselView startCarouselWithArray:imageArray];
[self.view addSubview:carouselView];
</pre>
7. 下個(gè)版本預(yù)告
- 添加啟動(dòng)超時(shí)自動(dòng)清除緩存功能
- 添加titlLabel標(biāo)簽等