【iOS】如何快速封裝一個輪播廣告,讓代碼更優(yōu)雅!

該如何精簡代碼?

  • 1.代碼的精進,并非是一朝一夕,首先在寫代碼時拆挥,我們要明確一個原則,如何才能讓代碼更優(yōu)雅, 態(tài)度決定高度, 所以,更多的時候,往往都是羨慕別人寫的代碼清潔又優(yōu)雅某抓,那為什么不知道去嘗試讓自己的代碼也變得整潔纸兔。。否副。
  • 2.一個功能模塊汉矿,公共組件,要有極高的可移植性副编,和簡便易用性質(zhì)负甸。 就拿隨處可見的輪播廣告來說,在使用時痹届,我們希望的是一行代碼就能做到集成和使用呻待。

如何實現(xiàn)輪播廣告?

  • 那么队腐,該如何進行實現(xiàn)呢蚕捉,首先,一個" @interfaceSXScrPageView : UIView "類柴淘,作為我們實現(xiàn)輪播廣告的類迫淹。 在下面的方法秘通,寫上一個初始方法,很清晰明了,在使用時只需要傳來相應的參數(shù)就行了敛熬。肺稀。

- 初始化方法

/**
 *  初始化圖片輪播圖方法
 *
 *  @param frame          坐標
 *  @param imageNameArray 圖片數(shù)組
 *  @param clickBlock     點擊事件的Block回調(diào)
 *
 *  @return 當前對象
 */
+(instancetype)direcWithtFrame:(CGRect)frame
                      ImageArr:(NSArray *)imageNameArray
            AndImageClickBlock:(imageClickBlock)clickBlock;

- 部分實現(xiàn)方法如下,使用靜態(tài)初始化:

#pragma mark 靜態(tài)初始化方法
+(instancetype)direcWithtFrame:(CGRect)frame
                      ImageArr:(NSArray *)imageNameArray
            AndImageClickBlock:(imageClickBlock)clickBlock;
{
  //返回實體:
    return [[SXScrPageView alloc]initWithtFrame:frame
                                       ImageArr:imageNameArray
                             AndImageClickBlock:clickBlock];
}
#pragma mark 默認初始化方法
-(instancetype)initWithtFrame:(CGRect)frame
                     ImageArr:(NSArray *)imageNameArray
           AndImageClickBlock:(imageClickBlock)clickBlock;
{
    if(self=[self initWithFrame:frame])
    {

        //設置ScrollView的contentSize
        self.direct.contentSize = CGSizeMake((imageNameArray.count+2)*frame_width,0);
        
        self.pageVC.numberOfPages = imageNameArray.count;
        
        //設置滾動圖片數(shù)組
        self.imageArr=imageNameArray;
        
        //設置圖片點擊的Block
        self.clickBlock=clickBlock;
    }
    return self;
}

- 定時器的使用:

  • 大部分的輪播廣告,我們必不可缺少的神器应民,沒錯就是定時器话原,如何實現(xiàn)自動滾動,加上一個定時器诲锹,就變得美好起來了繁仁,通過定時器改變滾動視圖的偏移量,和頁碼視圖的偏移量归园。

- 定時器部分代碼如下:

#pragma mark 初始化定時器
-(void)beginTimer
{
    if(self.timer == nil)
    {
        self.timer =[NSTimer scheduledTimerWithTimeInterval:self.time
                                                     target:self
                                                   selector:@selector(timerSel) userInfo:nil repeats:YES];
    }
}
#pragma mark 摧毀定時器
-(void)stopTimer
{
    [self.timer invalidate];
    self.timer=nil;
}

#pragma mark 定時器調(diào)用的方法
-(void)timerSel
{
    //獲取并且計算當前頁碼
    CGPoint currentConOffSet=self.direct.contentOffset;
    currentConOffSet.x+=frame_width;
    
    //動畫改變當前頁碼
    [UIView animateWithDuration:0.5 animations:^{
        self.direct.contentOffset=currentConOffSet;
    }completion:^(BOOL finished) {
        [self updataWhenFirstOrLast];
    }];
}
#pragma mark 判斷是否第一或者最后一個圖片,改變坐標
-(void)updataWhenFirstOrLast
{
    //當圖片移動到最后一張時黄虱,動畫結(jié)束移動到第二張圖片的位置
    if(contentOffSet_x>=contentSize_x-frame_width)
    {
        self.direct.contentOffset=CGPointMake(frame_width, 0);
    }
    //當圖片移動到第一張時,動畫結(jié)束移動到倒數(shù)第二張的位置
    else if (contentOffSet_x<=0)
    {
        self.direct.contentOffset=CGPointMake(contentSize_x-2*frame_width, 0);
    }
    
    //更新PageControl
    [self updataPageControl];
}
#pragma mark 更新PageControl
-(void)updataPageControl
{
    NSInteger index=(contentOffSet_x-frame_width)/frame_width;
    self.pageVC.currentPage=index;
}

- 滾動視圖的代理方法實現(xiàn):

  • 我們也要使用到UIScrollViewDelegate庸诱,通過代理方法來控制輪播圖的變化捻浦,和定時器開啟與關(guān)閉!
#pragma mark-========================UIScrollViewDelegate=====================

#pragma mark 開始拖拽代理
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    [self stopTimer];
}

#pragma mark 結(jié)束拖拽代理
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    [self beginTimer];
}

#pragma mark 結(jié)束滾動代理
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    //當最后或者最前一張圖片時改變坐標
    [self updataWhenFirstOrLast];
}

- 最后偶翅,加上圖片點擊事件回調(diào):


#pragma mark 圖片點擊事件
-(void)imageClick:(UITapGestureRecognizer *)tap
{
    UIView *view=tap.view;
    if(self.clickBlock)
    {
        self.clickBlock(view.tag);
    }
}

注:這只是部分代碼的展示默勾,如有需要請加本人碉渡!代碼地址:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末聚谁,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子滞诺,更是在濱河造成了極大的恐慌形导,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件习霹,死亡現(xiàn)場離奇詭異朵耕,居然都是意外死亡,警方通過查閱死者的電腦和手機淋叶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門阎曹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人煞檩,你說我怎么就攤上這事处嫌。” “怎么了斟湃?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵熏迹,是天一觀的道長。 經(jīng)常有香客問我凝赛,道長注暗,這世上最難降的妖魔是什么坛缕? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮捆昏,結(jié)果婚禮上赚楚,老公的妹妹穿的比我還像新娘。我一直安慰自己骗卜,他們只是感情好直晨,可當我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著膨俐,像睡著了一般勇皇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上焚刺,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天敛摘,我揣著相機與錄音,去河邊找鬼乳愉。 笑死兄淫,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的蔓姚。 我是一名探鬼主播捕虽,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼坡脐!你這毒婦竟也來了泄私?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤备闲,失蹤者是張志新(化名)和其女友劉穎晌端,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體恬砂,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡咧纠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了泻骤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片漆羔。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖狱掂,靈堂內(nèi)的尸體忽然破棺而出演痒,到底是詐尸還是另有隱情,我是刑警寧澤符欠,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布嫡霞,位于F島的核電站,受9級特大地震影響希柿,放射性物質(zhì)發(fā)生泄漏诊沪。R本人自食惡果不足惜养筒,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望端姚。 院中可真熱鬧晕粪,春花似錦、人聲如沸渐裸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽昏鹃。三九已至尚氛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間洞渤,已是汗流浹背阅嘶。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留载迄,地道東北人讯柔。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像护昧,于是被迫代替她去往敵國和親魂迄。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,697評論 2 351

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,862評論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫惋耙、插件捣炬、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,066評論 4 62
  • 天黯灰,浪子歸,過往終不回怠晴。悲傷快樂幾人懂遥金,爛為枯梧桐。 夜微涼蒜田,隱殘陽,世事愁斷腸选泻。烈酒臘肉幾人陪冲粤,化作相思淚。
    喃平閱讀 73評論 1 2
  • 詩歌是永遠的愛人 詩情畫意間勾勒出的唐韻宋律 是散落窗前明月的一簾幽夢 歌舞升平里樓蘭沙場的征人 ...
    天山秋月閱讀 299評論 1 3
  • 黑色 是世界的本來面目 而你 幻想用彩色來涂抹 烏鴉一直在聒噪 狂風在繼續(xù)舞蹈 途經(jīng)的列車 撕心裂肺的鳴叫 半個月...
    黃梅梅閱讀 107評論 0 0