iOS 輪播圖Banner圖片動圖混合無限輪播

KJBannerView

  • 介紹一下自己之前寫的無限輪播圖庫峭梳,無限自動循環(huán)滾動,大家有什么需求可以給我留言苏潜,持續(xù)更新中...

Demo地址:KJBannerViewDemo

image

功能介紹

KJBannerView 是一款輪播Banner,支持動態(tài)圖和網(wǎng)圖混播
1魁瞪、縮放無限自動循環(huán)滾動 √
2、支持四種方向滾動驳概,從左往右顺又、從右往左稚照、從上往下果录、從下往上 √
3弱恒、自定義繼承斤彼,定制不同樣式蘸泻,詳情使用請見Demo √
4悦施、支持網(wǎng)絡(luò)動態(tài)圖和網(wǎng)絡(luò)圖片和本地圖片混合輪播 √
5抡诞、支持在Storyboard和Xib中創(chuàng)建并配置其屬性 √
6昼汗、提供多種分頁控件PageControl顯示 √
7顷窒、自帶緩存加載,內(nèi)部封裝網(wǎng)圖下載緩存工具 √


使用方法

pod 'KJBannerView' # 輪播圖 

API & Property

NS_ASSUME_NONNULL_BEGIN
IB_DESIGNABLE
@interface KJBannerView : UIView
/// 代理方法
@property (nonatomic,weak) id<KJBannerViewDelegate> delegate;
@property (nonatomic,weak) id<KJBannerViewDataSource> dataSource;
/// Block回調(diào)
@property (nonatomic,readwrite,copy) void(^kSelectBlock)(KJBannerView *banner, NSInteger idx);
@property (nonatomic,readwrite,copy) void(^kScrollBlock)(KJBannerView *banner, NSInteger idx);
/// 暫停計時器滾動處理,備注:在viewDidDisappear當(dāng)中實現(xiàn)
- (void)kj_pauseTimer;
/// 繼續(xù)計時器滾動坛掠,備注:在viewDidAppear當(dāng)中實現(xiàn)
- (void)kj_repauseTimer;
/// 滾動到指定位置屉栓,備注:需要在設(shè)置數(shù)據(jù)源之后調(diào)用
- (void)kj_makeScrollToIndex:(NSInteger)index;
/// 使用Masonry自動布局友多,請在設(shè)置布局之后調(diào)用該方法
- (void)kj_useMasonry;

//************************ 數(shù)據(jù)源API ************************
/// 數(shù)據(jù)源
@property (nonatomic,strong) NSArray<NSString*>*imageDatas;
/// 自動滾動間隔時間欠拾,默認2s
@property (nonatomic,assign) IBInspectable CGFloat autoTime;
/// 是否無線循環(huán)藐窄,默認yes
@property (nonatomic,assign) IBInspectable BOOL infiniteLoop;
/// 是否自動滑動荆忍,默認yes
@property (nonatomic,assign) IBInspectable BOOL autoScroll;
/// 是否縮放刹枉,默認不縮放
@property (nonatomic,assign) IBInspectable BOOL isZoom;
/// cell寬度微宝,左右寬度
@property (nonatomic,assign) IBInspectable CGFloat itemWidth;
/// cell間距,默認為0
@property (nonatomic,assign) IBInspectable CGFloat itemSpace;
/// 是否顯示分頁控件镶摘,默認yes
@property (nonatomic,assign) IBInspectable BOOL showPageControl;
/// 滾動方向凄敢,默認從右到左
@property (nonatomic,assign) KJBannerViewRollDirectionType rollType;
/// 分頁控制器
@property (nonatomic,strong,readonly) KJPageView *pageControl;

//************************ 廢棄屬性方法 *****************************/
/// 支持自定義Cell涝缝,自定義Cell需繼承自 KJBannerViewCell
@property (nonatomic,strong) Class itemClass DEPRECATED_MSG_ATTRIBUTE("Please use dataSource [kj_BannerView:BannerViewCell:ImageDatas:Index:]");

@end

//******************** 自帶KJBannerViewCell可設(shè)置屬性 ********************
@interface KJBannerView (KJBannerViewCell)
/// 是否裁剪嫩挤,默認NO
@property (nonatomic,assign) IBInspectable BOOL bannerScale;
/// imagView圓角消恍,默認為0px
@property (nonatomic,assign) IBInspectable CGFloat bannerRadius;
/// cell的占位圖约啊,用于網(wǎng)絡(luò)未加載到圖片時
@property (nonatomic,strong) IBInspectable UIImage *placeholderImage;
/// 輪播圖片的ContentMode恰矩,默認為 UIViewContentModeScaleToFill
@property (nonatomic,assign) UIViewContentMode bannerContentMode;
/// 圖片的樣式外傅,默認 KJBannerViewImageTypeNetIamge 網(wǎng)絡(luò)圖片
@property (nonatomic,assign) KJBannerViewImageType imageType;
/// 是否采用動態(tài)圖緩存萎胰,默認NO
@property (nonatomic,assign) BOOL openGIFCache;

@end

NS_ASSUME_NONNULL_END

KJBannerView類介紹

Class 功能區(qū)
KJBannerView 輪播圖主控件
KJPageView 自定義分頁控件
KJBannerViewFlowLayout Cell縮放管理
KJBannerViewCell 基類,自定義需繼承該Cell
KJBannerDatasInfo 自帶BannerViewCell數(shù)據(jù)模型
KJLoadImageView 不依賴三方網(wǎng)絡(luò)加載圖片顯示控件
KJBannerTool 工具方法
KJBannerViewType 枚舉文件夾
KJBannerViewProtocol 委托協(xié)議相關(guān)
NSTimer+KJSolve 計時器分類
UIImage+KJBannerGIF 動態(tài)圖分類
KJBannerViewCacheManager 緩存工具
KJBannerViewDownloader 網(wǎng)絡(luò)請求工具
KJBannerViewLoadManager 網(wǎng)圖下載工具

支持Xib快捷設(shè)置屬性

Xib

效果圖

輪播圖

下載測試效果圖搓扯,圖片采用信號量方式獲取

IMG_0145.PNG

用法示例

Masonry自動布局

使用Masonry自動布局,請在設(shè)置布局之后調(diào)用該方法kj_useMasonry

- (void)setMasonry{
    self.banner2 = [[KJBannerView alloc]init];
    self.banner2.autoTime = 2;
    self.banner2.isZoom = YES;
    self.banner2.itemSpace = -10;
    self.banner2.itemWidth = 280;
    self.banner2.delegate = self;
    self.banner2.dataSource = self;
    self.banner2.imageType = KJBannerViewImageTypeMix;
    self.banner2.pageControl.pageType = PageControlStyleSizeDot;
    self.banner2.pageControl.displayType = KJPageControlDisplayTypeRight;
    self.banner2.pageControl.backgroundColor = [UIColor.blackColor colorWithAlphaComponent:0.5];
    [self.backView addSubview:self.banner2];
    [self.banner2 mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.left.right.bottom.mas_equalTo(0);
    }];
    [self.banner2 kj_useMasonry];
    
    self.banner2.imageDatas = self.temp;
}

Xib布局

- (void)setXib{
    self.banner.delegate = self;
    self.banner.pageControl.pageType = PageControlStyleRectangle;
    self.banner.pageControl.selectColor = UIColor.greenColor;
    self.banner.pageControl.dotwidth = 20;
    self.banner.pageControl.dotheight = 2;
    self.banner.pageControl.backgroundColor = [UIColor.blackColor colorWithAlphaComponent:0.5];
    self.banner.pageControl.displayType = KJPageControlDisplayTypeLeft;
    self.banner.imageType = KJBannerViewImageTypeMix;
    self.banner.bannerScale = YES;
    self.banner.rollType = KJBannerViewRollDirectionTypeBottomToTop;
    self.banner.bannerContentMode = UIViewContentModeScaleAspectFill;
    self.banner.imageDatas = @[tu2,gif2,@"IMG_0139",@"tu3"];
    [self.banner kj_makeScrollToIndex:1];
}

委托自定義控件

#pragma mark - KJBannerViewDataSource
- (UIView*)kj_BannerView:(KJBannerView*)banner BannerViewCell:(KJBannerViewCell*)bannercell ImageDatas:(NSArray*)imageDatas Index:(NSInteger)index{
    KJBannerModel *model = imageDatas[index];
    CGRect rect = {0, 0, 100, 20};
    UILabel *label = [[UILabel alloc]initWithFrame:rect];
    if (index == 0) {
        label.text = @"定制不同的控件";
        label.frame = CGRectMake(0, 0, bannercell.contentView.frame.size.width, 40);
        label.font = [UIFont boldSystemFontOfSize:35];
        label.textColor = UIColor.greenColor;
        label.textAlignment = NSTextAlignmentCenter;
    }
    KJLoadImageView *imageView = [[KJLoadImageView alloc]initWithFrame:bannercell.contentView.bounds];
    imageView.kj_isScale = YES;
    [imageView kj_setImageWithURLString:model.customImageUrl Placeholder:[UIImage imageNamed:@"tu3"]];
    [imageView addSubview:label];
    return imageView;
}

繼承方式自定義控件

- (void)setText{
    self.banner3.showPageControl = NO;
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
    self.banner3.itemClass = [KJCollectionViewCell class];
#pragma clang diagnostic pop
    self.banner3.rollType = KJBannerViewRollDirectionTypeBottomToTop;
    self.banner3.imageDatas = @[@"測試文本滾動",@"覺得好用請給我點個星",@"有什么問題也可以聯(lián)系我",@"郵箱: ykj310@126.com"];
}

自定義Cell使用

- (void)setModel:(NSObject*)model{
    self.label.text = (NSString*)model;
}

輪播圖介紹就到此完畢锦担,后面有相關(guān)再補充套媚,寫文章不容易堤瘤,還請點個小星星傳送門

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市慎皱,隨后出現(xiàn)的幾起案子茫多,更是在濱河造成了極大的恐慌天揖,老刑警劉巖今膊,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扑眉,死亡現(xiàn)場離奇詭異聘裁,居然都是意外死亡衡便,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鹊碍,“玉大人公罕,你說我怎么就攤上這事楼眷。” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蔗崎。 經(jīng)常有香客問我缓苛,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任袱瓮,我火速辦了婚禮绊起,結(jié)果婚禮上串前,老公的妹妹穿的比我還像新娘实蔽。我一直安慰自己荡碾,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布局装。 她就那樣靜靜地躺著坛吁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪铐尚。 梳的紋絲不亂的頭發(fā)上拨脉,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機與錄音宣增,去河邊找鬼玫膀。 笑死,一個胖子當(dāng)著我的面吹牛爹脾,可吹牛的內(nèi)容都是我干的帖旨。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼灵妨,長吁一口氣:“原來是場噩夢啊……” “哼解阅!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起泌霍,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤货抄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后朱转,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蟹地,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年肋拔,在試婚紗的時候發(fā)現(xiàn)自己被綠了锈津。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呀酸。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡凉蜂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出性誉,到底是詐尸還是另有隱情窿吩,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布错览,位于F島的核電站纫雁,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏倾哺。R本人自食惡果不足惜轧邪,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一刽脖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧忌愚,春花似錦曲管、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至简十,卻和暖如春檬某,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背螟蝙。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工恢恼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人胰默。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓厅瞎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親初坠。 傳聞我的和親對象是個殘疾皇子和簸,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,090評論 1 32
  • 因為要結(jié)局swift3.0中引用snapKit的問題,看到一篇介紹Xcode8,swift3變化的文章,覺得很詳細...
    uniapp閱讀 4,403評論 0 12
  • B_R_I_TTANY閱讀 176評論 0 0
  • 原創(chuàng)/蘋兒(茵草芳菲) 敦煌石窟壁畫已流傳千年,而壁畫中的樂音碟刺、樂舞锁保,首次在徐家匯藝術(shù)中心揭開神秘面紗…… 敦煌石...
    茵草芳菲閱讀 1,055評論 2 12
  • 最近熊市爽柒,很多人的資產(chǎn)都腰斬再腰斬,有的恨不得腳斬者填,或者腳底板斬浩村。然后我就想,歷史上的熊市占哟,大家都是怎么想心墅,怎么做...
    劉勝新閱讀 179評論 0 0