ScrollView實現(xiàn)圖片輪播及封裝自定義控件

效果

圖片輪播

步驟

  1. 新建xib文件
  2. 在xib文件中添加UIScrollView及UIPageControl
  3. 新建類俺附,把xib文件的Custom Class設置為該類
  4. 在類中創(chuàng)建UIScrollView鸿竖、UIPageControl兩個控件變量和一個數(shù)組著隆,數(shù)組用于存放圖片名稱。
  5. 新建類方法返回該Xib文件
 /**
 *  初始化
 *
 *  @return 返回WXPageView
 */
+(instancetype)PageView
{
    return [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass(self) owner:nil options:nil] lastObject];
}
    ```
6.在數(shù)組變量的set方法中給UIScrollView控件添加圖片皇帮,并且設置UIPageControl的總頁數(shù)(總頁數(shù)即為圖片總數(shù))   

```objc
-(void)setImageNames:(NSArray *)imageNames
{
    _imageNames = imageNames;
    
    for (int i = 0; i < imageNames.count; i++) {
        UIImageView *imageView = [[UIImageView alloc]init];
        imageView.image = [UIImage imageNamed:imageNames[i]];
        
        [self.scrollView addSubview:imageView];
    }
    
    self.page.numberOfPages = imageNames.count;
}

7.重寫layoutSubviews方法設置xib文件中所有控件的Frame刽严。

-(void)layoutSubviews
{
    [super layoutSubviews];//注意不要忘記調用父類的layoutSubviews
    
    for (int i = 0; i<self.scrollView.subviews.count; i++) {
        self.scrollView.subviews[i].frame = CGRectMake(i * self.frame.size.width, 0, self.frame.size.width, self.frame.size.height);
    }
    
    self.scrollView.pagingEnabled = YES;
    self.scrollView.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
    // 圖片寬度于scrollview一致寸潦,設置contentSize的X為總頁數(shù)(即圖片總數(shù))乘以scrollview的寬度皇筛。不需要上下滾動琉历,Y為0。
    self.scrollView.contentSize = CGSizeMake(self.page.numberOfPages * self.frame.size.width, 0);
    // 代理
    self.scrollView.delegate = self;
    // self.scrollView.frame.size.width / 2 是scrollView的X中心點
    // self.scrollView.frame.size.height / 2 是scrollView的Y中心點
    // (self.scrollView.frame.size.height / 2) + self.scrollView.frame.size.height / 3 是從Y的中心點算起再加上三分之一的scrollView高度
    self.page.frame = CGRectMake((self.scrollView.frame.size.width / 2) - 20, (self.scrollView.frame.size.height / 2) + self.scrollView.frame.size.height / 3, 50, 20);
}

8.實現(xiàn)UIScrollViewDelegate協(xié)議的scrollViewDidScroll方法水醋,監(jiān)聽scrollview的滾動

-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    //當前頁等于scrollview的contentOffset.x除以scrollview的寬度再四舍五入
    int page = self.scrollView.contentOffset.x / self.scrollView.frame.size.width + 0.5;
    self.page.currentPage = page;
}

9.最后在用到該自定義控件的時候如下方法調用

    PageView *page = [PageView PageView];
    //只傳圖片名稱
    page.imageNames = @[@"img_00",@"img_01",@"img_02",@"img_03",@"img_04"];
    page.frame = CGRectMake(20, 100, 374, 157);
    
    [self.view addSubview:page];

現(xiàn)存問題:自定義控件中的UIPageControl位置沒想到太好的辦法調整旗笔,如果設置的寬度太高下面留余太多。

2016-3-31更新解決UIPageControl位置問題拄踪,改變計算位置方法如下

    // 獲得scrollview的尺寸
    CGFloat scrollW = self.scrollView.frame.size.width;
    CGFloat scrollH = self.scrollView.frame.size.height;
    
    // 設置pageControl
    CGFloat pageW = 150;
    CGFloat pageH = 40;
    CGFloat pageX = scrollW - pageW;
    CGFloat pageY = scrollH - pageH;
    self.page.frame = CGRectMake(pageX, pageY, pageW, pageH);
小貼士:如在設計接口時希望不再使用以前設計的方法蝇恶,可以在屬性后加NS_DEPRECATED_IOS(2_0, 3_0),會在調用時顯示刪除線惶桐,即不再推薦該屬性,還可以在NS_DEPRECATED_IOS(2_0, 3_0)后加文字推薦艘包,例如:NS_DEPRECATED_IOS(2_0, 3_0,"推薦使用XXX")的猛,其中2_0,3_0的意思是iOS2.0版本開始使用,3.0版本過期想虎。
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市叛拷,隨后出現(xiàn)的幾起案子舌厨,更是在濱河造成了極大的恐慌,老刑警劉巖忿薇,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件裙椭,死亡現(xiàn)場離奇詭異,居然都是意外死亡署浩,警方通過查閱死者的電腦和手機揉燃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來筋栋,“玉大人炊汤,你說我怎么就攤上這事”兹粒” “怎么了抢腐?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長襟交。 經(jīng)常有香客問我迈倍,道長,這世上最難降的妖魔是什么捣域? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任啼染,我火速辦了婚禮,結果婚禮上焕梅,老公的妹妹穿的比我還像新娘迹鹅。我一直安慰自己,他們只是感情好丘侠,可當我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布徒欣。 她就那樣靜靜地躺著,像睡著了一般蜗字。 火紅的嫁衣襯著肌膚如雪打肝。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天挪捕,我揣著相機與錄音粗梭,去河邊找鬼。 笑死级零,一個胖子當著我的面吹牛断医,可吹牛的內(nèi)容都是我干的滞乙。 我是一名探鬼主播,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼鉴嗤,長吁一口氣:“原來是場噩夢啊……” “哼斩启!你這毒婦竟也來了?” 一聲冷哼從身側響起醉锅,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤兔簇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后硬耍,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體垄琐,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年经柴,在試婚紗的時候發(fā)現(xiàn)自己被綠了狸窘。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡坯认,死狀恐怖翻擒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鹃操,我是刑警寧澤韭寸,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站荆隘,受9級特大地震影響恩伺,放射性物質發(fā)生泄漏。R本人自食惡果不足惜椰拒,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一晶渠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧燃观,春花似錦褒脯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至脊框,卻和暖如春颁督,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背浇雹。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工沉御, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吠裆。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓伐谈,卻偏偏與公主長得像,于是被迫代替她去往敵國和親试疙。 傳聞我的和親對象是個殘疾皇子诵棵,可洞房花燭夜當晚...
    茶點故事閱讀 44,678評論 2 354

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