該如何精簡代碼?
- 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)系作者