国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

ios–滾動視圖(UIScrollView)詳解

2019-11-14 19:51:16
字體:
來源:轉載
供稿:網友

移動的設備的屏幕大小有限,當一個視圖要顯示的內容大于屏幕尺寸的時候就要用到滾動視圖,比如一個網頁的內容通常比屏幕尺寸大,那么瀏覽器就使用了滾動視圖。

 

UIScrollView有一個contentSize屬性,聲明如下:

@PRoperty(nonatomic)         CGSize                       contentSize;

這個屬性表示滾動視圖的內容有多大。

創建滾動視圖實例:

- (void)viewDidLoad {    [super viewDidLoad];    // Do any additional setup after loading the view, typically from a nib.    UIScrollView *sv = [[UIScrollView alloc] initWithFrame:self.view.frame];    sv.contentSize = CGSizeMake(1000, 1000);    sv.backgroundColor = [UIColor redColor];    [self.view addSubview:sv];}

效果圖:

image

contentSize 屬性為{1000,1000},可以很明顯的看到橫向和縱向滾動條。

1. 滾動

視圖的滾動也沒什么好說的,主要是設置一些屬性:


scrollEnabled  是否開啟滾動

scrollsToTop  默認為YES,用戶可以單擊狀態欄滾動至頂部

bounces  默認為YES,當滾動至邊界時還可以進一步滾動,松開時迅速彈回至原位

directionalLockEnabled  如果為YES,僅可以同時在一個方向上滾動

decelerationRate  在輕彈屏幕后,滾動的速度逐漸衰減,較低的值衰減越快

showsHorizontalScrollIndicator、showsVerticalScrollIndicator  默認為YES,滾動時滾動指示條可見

indicatorStyle  滾動條的樣式(UIScrollViewIndicatorStyleBlack,UIScrollViewIndicatorStyleDefaultUIScrollViewIndicatorStyleWhite)

contentInset  指定內容四周的余量(上 左 下 右的順序)

scrollIndicatorInsets  指定了滾動指示條在位置的切換

contentOffset  內容的定位點,當前顯示內容的左上角

2. 分頁

當內容大于屏幕時就可以分頁,設置pagingEnabled屬性為YES,滾動視圖就不允許用戶自由滑動,只能通過滑動至相鄰的部分。

3. 縮放

使滾動視圖可以縮放需要時設置minimumZoomScale和maximumZoomScale兩個屬性的值(默認為1),還需要在滾動視圖的委托中實現viewForZoomingInScrollView:方法,該方法返回滾動視圖中哪個子視圖是可以縮放的,如果滾動視圖有多個子視圖,但是通常我們需要縮放整個滾動視圖的內容,那么將多個視圖放在一個視圖即可,在將這個視圖成為滾動視圖的子視圖。

滾動視圖通過對捏合手勢的響應進行縮放,如果縮放超出了我們設置的限制,當手勢結束時,尺寸退回到我們設置的限制。如果想要嚴格的限制縮放不超過我們設置的限制,將bouncesZoom設置為NO就可以了。

在某種情況下,比如我們雙擊需要進行縮放的時候,就要用代碼進行縮放,使用下面兩個方法:

- (void)setZoomScale:(CGFloat)scale animated:(BOOL)animated NS_AVAILABLE_IOS(3_0);- (void)zoomToRect:(CGRect)rect animated:(BOOL)animated NS_AVAILABLE_IOS(3_0);

setZoomScale:animated:  根據比例縮放

zoomToRect:animated:  給定矩形的大小進行縮放

4. 委托

UIScrollViewDelegate可以接收大量消息開幫助你跟蹤滾動視圖的工作

下面是協議的定義

@protocol UIScrollViewDelegate<NSObject>@optional- (void)scrollViewDidScroll:(UIScrollView *)scrollView;                                               // any offset changes- (void)scrollViewDidZoom:(UIScrollView *)scrollView NS_AVAILABLE_IOS(3_2); // any zoom scale changes// called on start of dragging (may require some time and or distance to move)- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;// called on finger up if the user dragged. velocity is in points/millisecond. targetContentOffset may be changed to adjust where the scroll view comes to rest- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset NS_AVAILABLE_IOS(5_0);// called on finger up if the user dragged. decelerate is true if it will continue moving afterwards- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate;- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView;   // called on finger up as we are moving- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;      // called when scroll view grinds to a halt- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView; // called when setContentOffset/scrollRectVisible:animated: finishes. not called if not animating- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView;     // return a view that will be scaled. if delegate returns nil, nothing happens- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view NS_AVAILABLE_IOS(3_2); // called before the scroll view begins zooming its content- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale; // scale between minimum and maximum. called after any 'bounce' animations- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView;   // return a yes if you want to scroll to the top. if not defined, assumes YES- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView;      // called when scrolling animation finished. may be called immediately if already at top@end

這些方法的意思就不解釋了,有注釋的,學習最快的方法就是看這些頭文件。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 饶平县| 都昌县| 静宁县| 遵义县| 新龙县| 江西省| 沙河市| 平江县| 班戈县| 海门市| 双城市| 南安市| 若尔盖县| 伊宁市| 蒲城县| 乌恰县| 勃利县| 肃北| 瑞丽市| 桂东县| 行唐县| 万源市| 舒城县| 静宁县| 定州市| 信丰县| 遵义县| 惠安县| 赣州市| 土默特右旗| 丽水市| 鹰潭市| 苏尼特右旗| 紫金县| 方城县| 封丘县| 富平县| 佛坪县| 昂仁县| 长海县| 甘肃省|