UIScrollView基礎篇

什么是UIScrollView

  • 移動設備的屏幕?小是極其有限的,因此直接展?在用戶眼前的內(nèi)容也相當有限

  • 當展?的內(nèi)容較多,超出一個屏幕時,用戶可通過滾動手勢來查看屏幕以外的內(nèi)容

  • UIScrollView是?個能夠滾動的視圖控件,可以?來展示大量的內(nèi)容,并且可以通過滾動查看所有的內(nèi)容

  • 舉例:


    Snip20151112_3.png
  • 上面是網(wǎng)易新聞APP的新聞滾動欄,這篇文章就是要利用UIScrollView做出這種效果

UIScrollView的基本使用

// 創(chuàng)建UIScrollView
UIScrollView *myScrollView = [UIScrollView alloc] init];

// 創(chuàng)建UIImageView
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image_01"]];

// 添加圖片
[self.scrollView addSubview:imageView];

// 設置滾動范圍
self.scrollView.contentSize = imageView.frame.size;

// 設置內(nèi)邊距(在原來內(nèi)容的周邊,添加內(nèi)邊距)
self.scrollView.contentInset = UIEdgeInsetsMake(10, 20, 40, 80);

UIScrollView的常用屬性

/*表示UIScrollView內(nèi)容的尺寸,滾動范圍(能滾多遠) **/
@property(nonatomic)CGSizecontentSize;

/*表示UIScrollView滾動的位置 **/
@property(nonatomic)CGPointcontentOffset;

/*這個屬性能夠在UIScrollView的4周增加額外的滾動區(qū)域,一般用來避免scrollView的內(nèi)容被其他控件擋住**/
@property(nonatomic)UIEdgeInsetscontentInset;
  • 用下面的圖片概括一下


    Snip20151112_14.png

UIScrollView的其他屬性

●  設置UIScrollView是否需要彈簧效果
   @property(nonatomic) BOOL bounces;   
●  設置UIScrollView是否能滾動
   @property(nonatomic,getter=isScrollEnabled)BOOLscrollEnabled;       
●  設置UIScrollView是否顯?示?水平滾動條
   @property(nonatomic) BOOL showsHorizontalScrollIndicator; 
●  設置UIScrollView是否顯?示?垂直滾動條
   @property(nonatomic) BOOL showsVerticalScrollIndicator;

利用UIScrollView實現(xiàn)內(nèi)容的縮放

  • 當?戶在UIScrollView?上使用捏合手勢時,UIScrollView會給代理發(fā)送一條消息,詢問代理究竟要縮放?己內(nèi)部的哪?個子控件(哪一塊內(nèi)容)
/**
 *  返回一個需要進行縮放的子控件(scrollView的子控件)
 */
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
    return self.imageView;
}
  • 縮放的實現(xiàn)
- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 添加圖片
    UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"minion"]];
    [self.scrollView addSubview:imageView];
    self.imageView = imageView;
    
    self.scrollView.contentSize = imageView.frame.size;
    
    // 設置縮放比例
    self.scrollView.maximumZoomScale = 2.0;
    self.scrollView.minimumZoomScale = 0.2;
}
#pragma mark - <UIScrollViewDelegate>
/**
 *  返回一個需要進行縮放的子控件(scrollView的子控件)
 */
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
    return self.imageView;
}

利用UIScrollView實現(xiàn)分頁功能

  • 將UIScrollView的pageEnabled設置為YES,UIScrollView就會被分割成多個獨立頁面,里面的內(nèi)容就能分頁顯示
  • UIPageContro的常見屬性
@property(nonatomic) NSInteger numberOfPages;
@property(nonatomic) NSInteger currentPage;
@property(nonatomic) BOOLhidesForSinglePage;
@property(nonatomic,retain) UIColor *pageIndicatorTintColor;
@property(nonatomic,retain) UIColor *currentPageIndicatorTintColor
Snip20151112_17.png

利用NStimer實現(xiàn)UIScollView的自動翻頁

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 添加圖片
    CGFloat w = self.scrollView.frame.size.width;
    CGFloat h = self.scrollView.frame.size.height;
    int count = 5;
    for (int i = 0; i<count; i++) {
        UIImageView *imageView = [[UIImageView alloc] init];
        NSString *name = [NSString stringWithFormat:@"img_0%d", i + 1];

        // imageView的size為圖片的size
        imageView.image = [UIImage imageNamed:name];

        // imageView的size為scrollView的size
        imageView.frame = CGRectMake(i * w, 0, w, h);

        [self.scrollView addSubview:imageView];
    }
    
    // 設置內(nèi)容大小
    // contentSize.height == 0 僅僅代表豎直方向上不能滾動
    self.scrollView.contentSize = CGSizeMake(count * w, 0);
    
    // 分頁
    // 每一頁的尺寸都是跟scrollView的frame.size一樣的
    self.scrollView.pagingEnabled = YES;
    
    // 設置總頁數(shù)
    self.pageControl.numberOfPages = count;
    // 單頁時自動隱藏pageControl
    self.pageControl.hidesForSinglePage = YES;
    
#pragma mark - 定時器相關
- (void)startTimer
{
    // 返回一個自動開始執(zhí)行任務的定時器
    self.timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(nextPage:) userInfo:nil repeats:YES];
    
    // 修改NSTimer在NSRunLoop中的模式:NSRunLoopCommonModes
    // 主線程不管在處理什么操作而涉,都會抽時間處理NSTimer
    [[NSRunLoop mainRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
}

- (void)stopTimer
{
    [self.timer invalidate];
}

// 程序一啟動就會創(chuàng)建一條主線程

/**
 *  顯示下一頁
 */
- (void)nextPage:(NSTimer *)timer
{
    // 計算出下一頁
    NSInteger page = self.pageControl.currentPage + 1;
    // 如果超過了最后一頁
    if (page == 5) {
        page = 0;
    }
    // 讓scrollView滾動到下一頁
    CGPoint offset = CGPointMake(page * self.scrollView.frame.size.width, 0);
    [self.scrollView setContentOffset:offset animated:YES];
}

#pragma mark - <UIScrollViewDelegate>
/**
 *  當scrollView滾動的時候,計算當前頁碼
 */
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    int page = (int)(scrollView.contentOffset.x / scrollView.frame.size.width + 0.5);
    self.pageControl.currentPage = page;
}

/**
 *  當用戶即將開始拖拽scrollView時嗅辣,停止定時器
 */
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    [self stopTimer];
}

/**
 *  當用戶已經(jīng)結(jié)束拖拽scrollView時议街,開啟定時器
 */
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    [self startTimer];
}
@end

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末汽久,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扫皱,死亡現(xiàn)場離奇詭異,居然都是意外死亡压语,警方通過查閱死者的電腦和手機啸罢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來胎食,“玉大人扰才,你說我怎么就攤上這事〔蘖” “怎么了衩匣?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長粥航。 經(jīng)常有香客問我琅捏,道長,這世上最難降的妖魔是什么递雀? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任柄延,我火速辦了婚禮,結(jié)果婚禮上缀程,老公的妹妹穿的比我還像新娘搜吧。我一直安慰自己,他們只是感情好杨凑,可當我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布滤奈。 她就那樣靜靜地躺著,像睡著了一般撩满。 火紅的嫁衣襯著肌膚如雪蜒程。 梳的紋絲不亂的頭發(fā)上绅你,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天,我揣著相機與錄音昭躺,去河邊找鬼忌锯。 笑死,一個胖子當著我的面吹牛领炫,可吹牛的內(nèi)容都是我干的汉规。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼驹吮,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了晶伦?” 一聲冷哼從身側(cè)響起碟狞,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎婚陪,沒想到半個月后族沃,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡泌参,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年脆淹,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沽一。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡盖溺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出铣缠,到底是詐尸還是另有隱情烘嘱,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布蝗蛙,位于F島的核電站蝇庭,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏捡硅。R本人自食惡果不足惜哮内,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望壮韭。 院中可真熱鬧北发,春花似錦、人聲如沸泰涂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽逼蒙。三九已至从绘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背僵井。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工陕截, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人批什。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓农曲,卻偏偏與公主長得像,于是被迫代替她去往敵國和親驻债。 傳聞我的和親對象是個殘疾皇子乳规,可洞房花燭夜當晚...
    茶點故事閱讀 44,955評論 2 355

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

  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫、插件合呐、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,104評論 4 62
  • 1暮的、 微不足道的開頭,往往暗藏一絲溫柔淌实。 初入初三冻辩,重新分班,放眼望去盡是陌生的面孔映入眼簾拆祈,寂靜的教室一如從前恨闪,...
    安暖如夏m閱讀 955評論 14 17
  • 時間易逝如流水,卻比流水更急放坏。 ——獻給我兵荒馬亂的青春 我叫鹿小咙咽,像所有16歲的少女一樣。愛幻想轻姿,愛瘋...
    有夢要追閱讀 288評論 0 1
  • 1互亮、 《我的少女時代》這部影片是高中時代的閨蜜陪我去看的犁享,看完她問我和他還有聯(lián)系嗎,我說豹休,沒有了炊昆,我沒有他的聯(lián)系方...
    張曉藍閱讀 399評論 0 4