學(xué)習(xí)筆記---輪播圖的封裝

準(zhǔn)備工作:利用cocopods導(dǎo)入SDWebImage
1.創(chuàng)建一個(gè)CYView繼承UIView

 自動(dòng)時(shí)間
#define kInterval  2
// 圖片點(diǎn)擊block回調(diào)
@property (nonatomic, copy) void(^imageBlock)(NSInteger index);
// 給外界留的接口匹层,只需要傳入frame和裝有網(wǎng)址的數(shù)組
- (instancetype)initWithFrame:(CGRect)frame imageURLs:(NSArray *)imageURLs;

2.導(dǎo)入SD頭文件 #import <UIImageView+WebCache.h>
寫在類的延展里面

@interface CYView() <UIScrollViewDelegate>
// 最下面的scrollView
@property (nonatomic, strong) UIScrollView *scrollView;
// 網(wǎng)址數(shù)組
@property (nonatomic, strong) NSArray *imageURLs;
@property (nonatomic, strong) UIPageControl *pageController;
// 定時(shí)器 當(dāng)用戶拖拽時(shí) 不需要自動(dòng)滑動(dòng) 所以設(shè)置為屬性
@property (nonatomic, strong) NSTimer *timer;
@end
// 傳入frame和裝有網(wǎng)址的數(shù)組
-(instancetype)initWithFrame:(CGRect)frame imageURLs:(NSArray *)imageURLs {
    self = [super initWithFrame:frame];
    if (self) {
        if (imageURLs.count == 0) {
            return nil;
        }
        self.imageURLs = imageURLs;
        [self createScrollView];
        [self initImages];
        [self createPageController];
        // 兩張圖以上才創(chuàng)建timer
        if (self.imageURLs.count >= 2) {
            [self createTimer];
        }
    }
    return self;
}

創(chuàng)建分頁(yè)控制器

- (void)createPageController {
    self.pageController = [[UIPageControl alloc] initWithFrame:CGRectMake(self.frame.size.width/2 - 60, self.frame.size.height - 20, 120, 20)];
    self.pageController.pageIndicatorTintColor = [UIColor greenColor];
    self.pageController.currentPageIndicatorTintColor = [UIColor redColor];
    [self addSubview:self.pageController];
    // 一共幾個(gè)diandian
    self.pageController.numberOfPages = self.imageURLs.count;
}

創(chuàng)建滾動(dòng)視圖

- (void)createScrollView {
    self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
    self.scrollView.contentSize = CGSizeMake(self.frame.size.width *  self.imageURLs.count, 0);
    self.scrollView.delegate = self;
    self.scrollView.backgroundColor = [UIColor yellowColor];
    [self addSubview:self.scrollView];  
}

初始化圖片

- (void)initImages{
    // 如果只有一個(gè)網(wǎng)址(一張圖片)不用循環(huán)輪播 直接創(chuàng)建一張imageView
    if (self.imageURLs.count == 1) {
        UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
        [imageView sd_setImageWithURL:[NSURL URLWithString:self.imageURLs[0]]];
        [self.scrollView addSubview:imageView];        
        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(imageClickFunction)];
        // 給每一張圖片都添加一個(gè)點(diǎn)擊事件
        [imageView addGestureRecognizer:tap];
        // 打開imageView交互
        imageView.userInteractionEnabled = YES;        
        return;
    }    
    // 在左右兩邊各添加一張imageView
    self.scrollView.contentSize = CGSizeMake(self.frame.size.width * (self.imageURLs.count + 2), 0);
    // 整夜?jié)L動(dòng)
    self.scrollView.pagingEnabled = YES;
    // 一上來(lái)就顯示第一個(gè)
    self.scrollView.contentOffset = CGPointMake(self.frame.size.width, 0);
    for (int i = 0; i < self.imageURLs.count + 2; i++) {  
    //創(chuàng)建手勢(shì)      
        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(imageClickFunction)];        
        UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(i * self.frame.size.width, 0, self.frame.size.width, self.frame.size.height)];
        // 給每一張圖片都添加一個(gè)點(diǎn)擊事件
        [imageView addGestureRecognizer:tap];
        // 打開imageView交互
        imageView.userInteractionEnabled = YES;
        // 第一張顯示最后一張的內(nèi)容
        if (i == 0) {
            [imageView sd_setImageWithURL:[NSURL URLWithString:self.imageURLs.lastObject]];
            // 最后一張顯示第一張的內(nèi)容
        } else if (i == self.imageURLs.count + 1) {
            [imageView sd_setImageWithURL:[NSURL URLWithString:self.imageURLs.firstObject]];
        } else {
            [imageView sd_setImageWithURL:[NSURL URLWithString:self.imageURLs[i - 1]]];
        }
        [self.scrollView addSubview:imageView];
    }
}

圖片點(diǎn)擊

- (void)imageClickFunction {
    // 回調(diào)block
    if (self.imageBlock) {
        self.imageBlock(self.pageController.currentPage);
    }
}

實(shí)現(xiàn)滾動(dòng)協(xié)議 #pragma mark ---UIScrollViewDelegate---

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    // 如果偏移到第0個(gè) 回到最后一個(gè)
    if (self.scrollView.contentOffset.x <= 0) {
        self.scrollView.contentOffset = CGPointMake(self.imageURLs.count * self.frame.size.width, 0);
    }
    if (self.scrollView.contentOffset.x >= (self.imageURLs.count + 1) * self.frame.size.width) {
        self.scrollView.contentOffset = CGPointMake(self.frame.size.width, 0);
    }
    self.pageController.currentPage = self.scrollView.contentOffset.x / self.frame.size.width - 1;
}
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
    // 定時(shí)器沒有提供暫停的方法  我們可以設(shè)置他在什么時(shí)間開啟
    [self.timer setFireDate:[NSDate distantFuture]];
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    // [self createTimer];
    [self.timer setFireDate:[NSDate dateWithTimeIntervalSinceNow:kInterval]];
}

// 當(dāng)我們代碼改變了偏移量 并且使用了動(dòng)畫的時(shí)候 會(huì)調(diào)用這個(gè)方法 不會(huì)調(diào)用結(jié)束減速的方法铅忿,可以手動(dòng)調(diào)用
//- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {
// [self scrollViewDidEndDecelerating:self.scrollView];
//}
定時(shí)器

- (void)createTimer {
    self.timer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(timeHander) userInfo:nil repeats:YES];
}

// 定時(shí)器方法

- (void)timeHander {
    CGPoint offSet = self.scrollView.contentOffset;
    offSet.x += self.frame.size.width;
    [self.scrollView setContentOffset:offSet animated:YES];
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市享言,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌荧琼,老刑警劉巖差牛,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件脐恩,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡被盈,警方通過(guò)查閱死者的電腦和手機(jī)只怎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門怜俐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人拍鲤,你說(shuō)我怎么就攤上這事∩谜猓” “怎么了仲翎?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)鲫构。 經(jīng)常有香客問(wèn)我玫坛,道長(zhǎng)湿镀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任算途,我火速辦了婚禮,結(jié)果婚禮上蚀腿,老公的妹妹穿的比我還像新娘嘴瓤。我一直安慰自己,他們只是感情好莉钙,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布廓脆。 她就那樣靜靜地躺著,像睡著了一般磁玉。 火紅的嫁衣襯著肌膚如雪停忿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天蚊伞,我揣著相機(jī)與錄音席赂,去河邊找鬼。 笑死时迫,一個(gè)胖子當(dāng)著我的面吹牛颅停,可吹牛的內(nèi)容都是我干的掠拳。 我是一名探鬼主播溺欧,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼壁拉!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起案铺,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤返吻,失蹤者是張志新(化名)和其女友劉穎街佑,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體磁携,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡烟央,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鬼贱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片葡秒。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡赖草,死狀恐怖秧骑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情骂澄,我是刑警寧澤坟冲,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布矩桂,位于F島的核電站侄榴,受9級(jí)特大地震影響辉哥,放射性物質(zhì)發(fā)生泄漏恒水。R本人自食惡果不足惜钉凌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一酸纲、第九天 我趴在偏房一處隱蔽的房頂上張望摄狱。 院中可真熱鬧祝谚,春花似錦次泽、人聲如沸席爽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)捺僻。三九已至乡洼,卻和暖如春醒颖,著一層夾襖步出監(jiān)牢的瞬間泞歉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工然走, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拆檬,地道東北人屑那。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓岳枷,卻偏偏與公主長(zhǎng)得像盛泡,于是被迫代替她去往敵國(guó)和親箱硕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子惠昔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

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