iOS中的UIScrollView 滾動(dòng)視圖

UIScrollView這個(gè)類(也就是滾動(dòng)視圖),可以讓我們展示比window尺寸大的內(nèi)容。用戶可以通過手勢(shì)來實(shí)現(xiàn)視圖的滾動(dòng)和縮放。
UIScrollView繼承于UIView,是UITableView和UITextView等UIKit類的父類。

基本用法

    //創(chuàng)建
    UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(50, 50, 314, 500)];
    //設(shè)置背景顏色
    scrollView.backgroundColor = [UIColor redColor];
    ```

 #####設(shè)置contentSize,這是UIScrollView的內(nèi)容視圖的尺寸,通常contentSize大于UIScrollView的frame
scrollView.contentSize = CGSizeMake(314*3, 500);  //非常重要
######設(shè)置是否可以滾動(dòng)
scrollView.scrollEnabled = YES;   // 默認(rèn)為YES
```
設(shè)置是否能夠整頁翻動(dòng)
    scrollView.pagingEnabled = YES;   // 默認(rèn)為NO。如果為YES,滑動(dòng)會(huì)停止在視圖邊界長度的倍數(shù)上。
    ```
######設(shè)置偏移量contentOffset
CGPoint類型,默認(rèn)為CGPointZero
scrollView.contentOffset = CGPointMake(314, 200);
```
設(shè)置是否能點(diǎn)擊狀態(tài)欄滾動(dòng)到頂部

默認(rèn)為 YES。點(diǎn)擊狀態(tài)欄時(shí), 如果屏幕上只有一個(gè)scrollsToTop屬性為YES的scrollView, 而且其代理的shouldScrollViewScrollToTop方法不返回NO, 那么這個(gè)scrollView會(huì)滾動(dòng)到頂部

    //scrollView.scrollsToTop = NO;  
設(shè)置是否顯示滾動(dòng)條
    //顯示水平方向的滾動(dòng)條(默認(rèn)YES)
    scrollView.showsHorizontalScrollIndicator = NO;
    //顯示垂直方向的滾動(dòng)條(默認(rèn)YES)
    scrollView.showsVerticalScrollIndicator = NO;
    ```
    
#####設(shè)置是否反彈
scrollView.bounces = NO; // 默認(rèn)為YES。如果該屬性為YES,視圖滾動(dòng)時(shí)可以越過邊界,越過邊界后會(huì)被彈回。
如果bounces設(shè)為NO,以下兩個(gè)屬性不論是不是YES都不會(huì)奏效:
//控制滾動(dòng)視圖遇到垂直方向是否反彈
scrollView.alwaysBounceVertical = YES;// 默認(rèn)為NO
//如果該屬性和bounces同時(shí)為YES,那么即使contentSize的height小于frame的height,豎直方向的拖拽也是允許的。

//控制滾動(dòng)視圖遇到水平方向是否反彈    
scrollView.alwaysBounceHorizontal = YES;//默認(rèn)為NO
//如果該屬性和bounces同時(shí)為YES,那么即使contentSize的width小于frame的width,水平方向的拖拽也是允許的。

##縮放功能

//設(shè)置最小縮放比例
scrollView.minimumZoomScale = 0.5;   //(此處設(shè)置的大小最小變?yōu)樵瓉淼?.5*0.5倍)
//設(shè)置最大縮放比例
scrollView.maximumZoomScale = 2;     //類型是CGFloat
                                 //zoomScale  // default is 1.0
//設(shè)置代理(若要實(shí)現(xiàn)縮放功能必須實(shí)現(xiàn)代理方法)
scrollView.delegate = self;
//縮放的時(shí)候是否會(huì)反彈
scrollView.bouncesZoom = YES;  // default is YES.
//獲取縮放狀態(tài)(只讀)
NSLog(@"%d",scrollView.zooming);  // zooming: returns YES if user in zoom gesture


//3 添加視圖
[self.view addSubview:scrollView];

UIImageView  * imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"dani.jpg"]];
                                  //注意UIImageView
imgView.frame = CGRectMake(0, 0, 314, 500);
[scrollView addSubview:imgView];   //addSubview相當(dāng)于往數(shù)組里加元素!
UIView *aView = [[UIView alloc] initWithFrame:CGRectMake(314, 0, 314, 200)];
aView.backgroundColor = [UIColor yellowColor];
[scrollView addSubview:aView];


self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"2"]];

#UIPageControl

######滾動(dòng)視圖經(jīng)常與UIPageControl一起使用。
######UIPageControl繼承于UIControl。
先添加兩個(gè)屬性
@property(nonatomic,strong)UIScrollView *scrollView;
@property(nonatomic,retain)UIPageControl *pageControl;
######UIPageControl的使用:
//創(chuàng)建
UIPageControl * pageControl = [[UIPageControl alloc]initWithFrame:CGRectMake(50, 600, 314, 34)];

//背景顏色
pageControl.backgroundColor = [UIColor blackColor];

//總頁數(shù)
pageControl.numberOfPages = 3;   //NSInteger類型

//當(dāng)前第幾頁(范圍是 0 ~ (numberOfPages - 1))
pageControl.currentPage = 0;  //NSInteger類型

//只有一頁的時(shí)候隱藏
pageControl.hidesForSinglePage = YES;//默認(rèn)為NO

//設(shè)置當(dāng)前頁指示器的顏色
pageControl.currentPageIndicatorTintColor = [UIColor redColor];

//設(shè)置指示器的顏色
pageControl.pageIndicatorTintColor = [UIColor whiteColor];

//添加點(diǎn)擊事件
[pageControl addTarget:self action:@selector(pageClick:) forControlEvents:UIControlEventValueChanged];

//設(shè)為屬性
self.scrollView = scrollView;
self.pageControl = pageControl;

//3 添加到視圖
[self.view addSubview:pageControl];


##UIPageControl點(diǎn)擊事件
點(diǎn)擊UIPageControl后,滾動(dòng)視圖顯示相應(yīng)頁面

-(void)pageClick:(UIPageControl *)sender{
//1 獲取當(dāng)前顯示第幾頁
NSInteger currentPage = sender.currentPage;
//2 設(shè)置scrollView的偏移量
self.scrollView.contentOffset = CGPointMake(314 * currentPage, 0);
}




#UIScrollViewDelegate


######如果想實(shí)現(xiàn)縮放,就必須實(shí)現(xiàn)viewForZoomingInScrollView這個(gè)代理方法,返回要進(jìn)行縮放的視圖。如果返回nil,則什么都不會(huì)被觸發(fā)。例:

-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{
return scrollView.subviews[0];
}

###以下的四個(gè)代理方法在拖拽過程中會(huì)依次被觸發(fā):
######即將開始拖拽

-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{

}

######停止拖拽時(shí)觸發(fā)

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{

}

######即將進(jìn)行減速

-(void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{

}```

減速結(jié)束

減速結(jié)束時(shí),我們可以通過contentOffset判斷當(dāng)前在那一頁,進(jìn)而改變pageControl的currentPage屬性。

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
    //獲取偏移量
    NSInteger currentPage = scrollView.contentOffset.x/314;
    //改變pageControl的顯示
    self.pageControl.currentPage = currentPage;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容