iOS開發(fā)-UIScrollview

初識(shí)UIScrollView

什么是UIScrollView?

  • 移動(dòng)設(shè)備的屏幕大小是極其有限的,當(dāng)展示的內(nèi)容較多的時(shí)候,超出一個(gè)屏幕時(shí),用戶可以通過滾動(dòng)手勢(shì)來查看屏幕以外的內(nèi)容
  • UIScrollview是一個(gè)能夠滾動(dòng)的視圖控件,可以用來展示大量的內(nèi)容.

UIScrollView的基本使用

  • 將需要展示的內(nèi)容添加到UIScrollview中
  • 設(shè)置UIScrollview的contentSize屬性,告訴UIScrollview所內(nèi)容的尺寸----就是滾動(dòng)的范圍
  • UIScrollview顯示內(nèi)容的小細(xì)節(jié)
  • 超出UIScrollview邊框的內(nèi)容會(huì)被自動(dòng)隱藏
  • 用戶可以用手勢(shì)拖動(dòng)來查看超出邊框并被隱藏的內(nèi)容

UIScrollView無法滾動(dòng)的原因

  • 沒有設(shè)置contentSize
  • scroEnabled = NO;
  • 沒有接收到觸摸事件:userInteractionEnabled = NO;

UIScrollView的屬性

關(guān)于顯示內(nèi)容的

表示UIScrollView滾動(dòng)的位置
(就是內(nèi)容左上角與scrollView左上角的間距!!)
@property (nonatomic) CGPoint contentOffset;


表示UIScrollView內(nèi)容的尺寸,滾動(dòng)范圍(能滾多遠(yuǎn))
@property (nonatomic) CGSize contentSize;


在UIScrollView的四周增加額外的滾動(dòng)區(qū)域,一般用來避免scrollView的內(nèi)容被其他控件擋住
@property (nonatomic) UIEdgeInsets contentInset;

其他屬性,效果or滾動(dòng)條

設(shè)置UIScrollView是否需要彈簧效果
@property (nonatomic) BOOL bounces;


設(shè)置UIScrollView是否能滾動(dòng)
@property (nonatomic,getter=isScrollEnabled) BOOL scrollEnabled;


是否顯示水平滾動(dòng)條
@property (nonatomic) BOOL showsHorizontalScrollIndicator;



是否顯示垂直滾動(dòng)條
@property (nonatomic) BOOL showsVerticalScrollIndicator;

UIScrollView的代理

在很多時(shí)候我們需要知道UIScrollView滾動(dòng)到了那里,它是否停止,那些時(shí)候來做一些特定的操作,要想完成那些特定的動(dòng)作進(jìn)行時(shí)的功能,前提就是能夠監(jiān)聽到UIScrollView整個(gè)滾動(dòng)的過程

要想監(jiān)聽整個(gè)UIScrollView的滾動(dòng)過程,就必須給它設(shè)置一個(gè)代理對(duì)象,通過代理得知UIScrollView的滾動(dòng)過程

UIScrollView和delegate的通信

  • UIScrollView和delegate的通信應(yīng)該如下表:
手勢(shì) 方法
開始拖拽 scrollViewWillBeginDragging:
具體到某個(gè)位置 scrollViewDidScroll:
用戶停止拖拽 scrollViewDidEndDragging:willDecelerate:

UIScrollView需要實(shí)現(xiàn)的方法都定義在UIScrollViewDelegate協(xié)議中,遵守協(xié)議后,實(shí)現(xiàn)協(xié)議中的方法就可以監(jiān)聽UIScrollView的滾動(dòng)過程

UIscrollView和控制器

  • 一般情況下,就設(shè)置UIScrollView所在的控制器為UIScrollView的delegate
  • 設(shè)置代理的方法有兩種:
    • 通過代碼來設(shè)置----self.scrollView.delegate = self;
    • 通過storyboard拖線

UIscrollView中內(nèi)容的縮放

  • 原理:當(dāng)用戶在UIScrollView身上使用捏合手勢(shì)時(shí),UIScrollView會(huì)給代理發(fā)送一條消息,詢問代理究竟要縮放自己內(nèi)部哪一塊
  • UIScrollView身上使用捏合手勢(shì)時(shí),調(diào)用viewForZoomingInScrollView:這個(gè)方法返回的控件就是需要進(jìn)行縮放的控件

縮放實(shí)現(xiàn)步驟

  • 設(shè)置UIScrollView的id<UIScrollViewDelegate>delegate代理對(duì)象
  • 設(shè)置minimumZoomScale:縮小的最小的比例
  • 設(shè)置maximumZoomScale:放大的最大的比例
  • 讓代理對(duì)象實(shí)現(xiàn)下面的方法,返回需要縮放的視圖控件
    - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView;

跟縮放相關(guān)的其他代理方法

即將開始縮放的時(shí)候調(diào)用
    - (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view;
    

正在縮放的時(shí)候調(diào)用

    - (void)scrollViewDidZoom:(UIScrollView *)scrollView;

分頁

  • 只要將UIScrollViewpageEnable屬性設(shè)置為YES,UIScrollView會(huì)被分割成多個(gè)獨(dú)立頁面,里面的內(nèi)容就能進(jìn)行分頁展示
  • 一般會(huì)配合UIPageControl增強(qiáng)分頁效果,UIPageControl常用屬性如下:

一共有多少頁
    @property (nonatomic) NSInteger numberOfPages;
    

當(dāng)前顯示的頁碼
    @property (nonatomic) NSInteger currentPage;
    
    
只有一頁的時(shí)候,是否需要隱藏頁碼指示器
    @property (nonatomic)BOOL hidesForSinglePage;
    

其他頁碼的顏色
    @property (nonatomic,retain) UIColor *pageIndicatorTintColor;
    
    
當(dāng)前頁碼指示器的顏色
    @property (nonatomic,retain) UIColor *currentPageIndicatorTintColor;

NSTimer

NSTimer叫做定時(shí)器

  • 在制定的時(shí)間執(zhí)行任務(wù)
  • 每隔一段時(shí)間執(zhí)行指定的任務(wù)

調(diào)用下面的方法就會(huì)開啟一個(gè)定時(shí)的任務(wù)

+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeINterval)ti target:(id)aTarget selector:(SEL)aselector userInfo:(id)userInfo repeats :(BOOL)yes or no;


每隔ti秒,調(diào)用一次aTarget的aSelector方法,yesOrno決定了是否重復(fù)執(zhí)行任務(wù)

- 解決定時(shí)器在主線程不工作的的問題
    
    NSTimer *timer = [NSTimer timerWithTimeInterval:2 target:self selector:@selector(next) userInfo:nil repeats:YES];
    
    [[NSRunLoop mainRunLoop] addTimer:timer   forMode:NSRunLoopCommonModes];

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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