翻譯-蘋果官方文檔-《iOS滾動視圖編程指南》(Scroll View Programming Guide for iOS)

翻譯-蘋果官方文檔-《iOS滾動視圖編程指南》(Scroll View Programming Guide for iOS)

翻譯到Basic Zooming Using Gestures,未完待續(xù)知允,另外翻譯的很爛撒蟀,雖然可能根本沒人看??

關(guān)于滾動視圖編程

在iOS應用中,當需要備展示或操作的內(nèi)容無法適應設(shè)備屏幕大小時温鸽,就要使用scrll views(滾動視圖)保屯。滾動視圖主要有兩個作用:

  • 允許用戶拖拽想要顯示的內(nèi)容區(qū)域

  • 允許用戶利用拖拽手勢放大或縮小所顯示的內(nèi)容

下圖顯示了一個典型的UIScrollView類的應用場景。UIImageView類的子類包含了一個小男孩的照片涤垫。當用戶在屏幕上拖拽手指時姑尺,照片上的視圖窗口不斷移動,正如讀者看到的蝠猬,滾動指示器在窗口中出現(xiàn)切蟋。當用戶抬起手指,指示器消失榆芦。

概覽

UIScrollView類可以提供以下功能:

  • 滾動不能完全適應屏幕的內(nèi)容

  • 縮放內(nèi)容柄粹,允許應用支持標準的縮放手勢

  • 將內(nèi)容滾動限制為每次滾動都顯示一整屏的內(nèi)容(翻頁模式

UIScrollView類并不包含為其所顯示內(nèi)容所定義的特殊的視圖喘鸟;相反,它會對自己的子視圖進行滾動镰惦。由于在iOS上發(fā)起滾屏不需要任何額外的控件迷守,所以這種簡單的模型是可行的。

基礎(chǔ)滾屏非常容易實現(xiàn)

通過drag(拖拽)和flick(撥動)進行滾屏不需要實現(xiàn)子類或指定代理旺入。只要能夠恰當?shù)脑O(shè)置UIScrollView類實例對象所顯示的內(nèi)容的尺寸兑凿,整個交互界面可以通過界面編輯器設(shè)計和創(chuàng)建。

相關(guān)章節(jié):創(chuàng)建和配置滾動視圖

要支持拖拽縮放手勢茵瘾,需要使用代理

添加基本的拖拽縮小和拖拽放大支持需要讓滾屏視圖使用代理礼华。代理類必需遵守UIScrollViewDelegate協(xié)議,而且必需實現(xiàn)能夠表明滾屏視圖的那個子視圖應該被縮放的代理方法拗秘。讀者必需設(shè)定最小和最大縮放系數(shù)中的一個或兩個都設(shè)置圣絮。

如果應用需要支持雙擊放大,兩指觸摸縮小雕旨,以及簡單的單觸滾屏和移動(除了標準的拖拽縮放意外的熟悉)扮匠,就需要在顯示內(nèi)容的視圖中實現(xiàn)代碼,滿足這些功能凡涩。

相關(guān)章節(jié):使用拖拽手勢的基本縮放

要支持拖拽縮放和點擊縮放棒搜,需在內(nèi)容視圖中實現(xiàn)代碼

如果應用需要支持雙擊放大,兩指觸摸縮小活箕,以及簡單的單觸滾屏和移動(除了標準的拖拽縮放意外的熟悉)力麸,就需要在顯示內(nèi)容的視圖中實現(xiàn)代碼。

相關(guān)章節(jié):點擊縮放

要支持翻頁模式育韩,只需要三個子視圖

要支持翻頁模式克蚂,不需要創(chuàng)建子類或使用代理。只需設(shè)定內(nèi)容的尺寸并開啟翻頁模式即可筋讨。只需三個子視圖就可以實現(xiàn)翻頁模式的大部分功能埃叭,這樣即節(jié)省了內(nèi)容空間,也提升了性能悉罕。

相關(guān)注釋:使用翻頁模式滾屏

閱讀前提

閱讀本篇指南之前游盲,請先閱讀App Programming Guide for iOS來了解開發(fā)iOS應用的基本流程。同樣考慮閱讀View Controller Programming Guide for iOS以了解視圖控制器的基本信息蛮粮,因為其經(jīng)常會同滾屏視圖配合使用益缎。

如何使用本指南

本指南接下來的章節(jié)會帶讀者逐步深入各種復雜的任務,如處理點擊放大技術(shù)然想,了解代理的角色叼丑,代理的消息序列匕得,以及在應用中嵌套滾屏視圖锌介。

相關(guān)拓展

下面列出的示例代碼對于讀者實現(xiàn)自己的滾屏視圖十分具有指導意義:

  • scrolling展示le基本滾屏

  • PageControl展示了在頁面模式下使用滾屏視圖

  • 示例項目ScrollViewSuite。這些是高端的示例代碼恼琼,展示了諸如點擊滾動和其它高級技術(shù),包括使用塊視圖來展示大型圖片屏富,同時有效的使用內(nèi)存晴竞。

創(chuàng)建和配置滾動視圖

同其他視圖一樣,滾動視圖也可以通過代碼或界面編輯器創(chuàng)建 狠半。只需要一些額外的設(shè)置噩死,就可以獲得基本的滾動能力。

創(chuàng)建和配置滾動視圖

同其他視圖一樣神年,滾動視圖被創(chuàng)建之后也會被加入一個視圖控制器或視圖結(jié)構(gòu)中已维。只需要額外的兩部就可以完成滾動視圖的配置:

  1. 必需通過conetentSize屬性來設(shè)置可滾動內(nèi)容的大小。這個屬性表明了可滾動區(qū)域的大小已日。

  2. 必需添加一個或多個視圖垛耳,來被滾動視圖顯示或滾動。這些視圖提供了顯示內(nèi)容飘千。

另外如果需要的話還可以為應用設(shè)置視覺提示——垂直和水平的滾動指示器堂鲜,拖拽回彈,縮放回彈护奈,以及滾動方向限制缔莲。

在界面編輯器中創(chuàng)建滾動視圖

要在界面編輯器中創(chuàng)建滾動視圖,可以將UIScrollView的圖標從Library->Cocoa Touch->Data Views選項板中拖拽到視窗中逆济。然后將UIViewController子類的視圖出口同滾屏視圖鏈接起來。圖1-1顯示了這個鏈接磺箕,假設(shè)File's Owner就是UIViewController的子類(這是一種常見的設(shè)計模式)奖慌。

即使在界面編輯器中的UIScrollView檢視面板允許讀者設(shè)置滾動視圖的許多屬性,但是讀者仍然需要在應用代碼中設(shè)置contentSize屬性松靡,其定義了可滾動范圍的尺寸简僧。如果將一個滾動視圖設(shè)置為一個視圖控制器的view屬性(一般情況下這個視圖控制器會是File's Owner),就需要在視圖控制器的viewDidLoad方法中初始化contentSize屬性雕欺,如表1-1岛马。

- (void)viewDidLoad {
    [super viewDidLoad];
    UIScrollView *tempScrollView=(UIScrollView *)self.view;
    tempScrollView.contentSize=CGSizeMake(1280,960);
}

設(shè)置好滾動視圖的尺寸后,應用可以向其添加子視圖屠列,提供需顯示的內(nèi)容啦逆,可以通過的編程的方式也可以利用界面編輯器。

從代碼創(chuàng)建滾動視圖

同樣也可以完全用代碼創(chuàng)建滾動視圖笛洛。這項工作一般在視圖控制器類的代碼中完成夏志,特別是在loadView方法中。示例實現(xiàn)代碼如表1-2所示苛让。

- (void)loadView {
    CGRect fullScreenRect=[[UIScreen mainScreen] applicationFrame];
    scrollView=[[UIScrollView alloc] initWithFrame:fullScreenRect];
    scrollView.contentSize=CGSizeMake(320,758);
    // do any further configuration to the scroll view
    // add a view, or views, as a subview of the scroll view.
    // release scrollView as self.view retains it
    self.view=scrollView;
    [scrollView release];
}

上面的代碼創(chuàng)建了一個大小為全屏的滾動視圖(減去狀態(tài)欄)沟蔑,將滾動視圖對象設(shè)置為視圖控制器的view湿诊,并將contentSize屬性設(shè)置為320 * 758像素(有錯,應該為點)瘦材。這個代碼創(chuàng)建了一個可以垂直滾動的滾動視圖厅须。

在真正的實現(xiàn)中會包含更多代碼。例如食棕,需要在代碼中加入子視圖或視圖朗和,并按要求配置它們。同樣宣蠕,代碼假設(shè)視圖控制器還沒有視圖例隆,如有,需要釋放已有的視圖并將滾動視圖設(shè)置為控制器的視圖抢蚀。

添加子視圖

創(chuàng)建和配置滾動視圖之后镀层,必需添加一個或多個子視圖來展示內(nèi)容。使用多少子視圖完全取決于一個要求:滾動視圖是否需要支持縮放皿曲?

如果想要支持縮放唱逢,最常見的技術(shù)是使用單一視圖,包含整個滾動視圖的contentSize(可滾動范圍)屋休,然后為那個子視圖添加額外的子視圖坞古。這樣就可以將包含其他視圖的視圖作為縮放視圖,而其子視圖將會根據(jù)起狀態(tài)自行縮放劫樟。

如果不要求縮放痪枫,那么不管使用單一子視圖(不管有沒有子視圖)還是多個子視圖都是可行的。

注:盡管使用單一子視圖是常見的方式叠艳,但讀者的應用也可能要求在同一個滾動視圖中使用多個子視圖來支持縮放奶陈。那樣,就需要使用代碼方法viewForZoomingInScrollView來返回合適的子視圖附较,詳見章節(jié)使用拖拽手勢實現(xiàn)基本縮放吃粒。

設(shè)置滾動視圖的內(nèi)容尺寸,內(nèi)容襯墊拒课,以及滾動指示器

contentSize屬性是需要在滾動視圖中顯示的內(nèi)容的尺寸徐勃。在界面編輯器中創(chuàng)建滾動視圖時,它被設(shè)置為320寬早像,758高僻肖。圖1-2的圖片表示了contentSize所表示的滾動視圖內(nèi)容的寬和高。

可能需要在滾動視圖的內(nèi)容周圍加上一些襯墊空間卢鹦,一般在整個內(nèi)容的上部和下部檐涝,這樣控制器和工具欄不會對內(nèi)容產(chǎn)生干擾。為了加入襯墊,使用contentInset屬性了為內(nèi)容設(shè)置一個緩沖區(qū)谁榜。這樣就可以在怪變子視圖尺寸或視圖內(nèi)容尺寸的情況下使得整個內(nèi)容區(qū)域變得更大幅聘。

contentInset屬性是一個UIEdgeInsets結(jié)構(gòu)體,包含內(nèi)容的上窃植,左帝蒿,下,右邊界分別到視圖邊緣的距離巷怜。圖1-3解釋了contentInsetcontentSize分別表示什么葛超。

如圖1-3所示,contentInset屬性(64, 0 , 44, 0)會導致上部的襯墊空間為64(20留給狀態(tài)欄延塑,44留給導航控制器)绣张,下不為44(工具欄的高度)。這樣設(shè)置contentInset屬性可以讓導航共建和狀態(tài)空間顯示在屏幕上关带,并且還可以完整的顯示滾動視圖的整個內(nèi)容侥涵。

- (void)loadView {
    CGRect fullScreenRect=[[UIScreen mainScreen] applicationFrame];
    scrollView=[[UIScrollView alloc] initWithFrame:fullScreenRect];
    self.view=scrollView;
    scrollView.contentSize=CGSizeMake(320,758);
    scrollView.contentInset=UIEdgeInsetsMake(64.0,0.0,44.0,0.0);
    // do any further configuration to the scroll view
    // add a view, or views, as a subview of the scroll view.
    // release scrollView as self.view retains it
    self.view=scrollView;
    [scrollView release];
}

圖1-4顯示了設(shè)置contentSize之后的效果。當窗口滾動至最上方時(如左圖)宋雏,屏幕為導航欄和狀態(tài)欄預留了空間芜飘。右邊的圖片顯示了當窗口滾動至最下方時,為工具欄預留了空間磨总。在這兩種情況中可以看到當內(nèi)容從導航欄或工具欄下方滾動時嗦明,它們都是透明的,但是當滾動至最上方或最下方時蚪燕,所有的內(nèi)容都是無遮擋的娶牌。

然而,改變contentInset的值會導致一個意想不到的副作用馆纳,當讀者滾動視圖顯示滾動指示器時诗良。當用戶拖拽內(nèi)容至最上方或最下方時,滾動指示器會出現(xiàn)在由contentInset屬性所定義的范圍內(nèi)的內(nèi)容上厕诡,例如累榜,它會出現(xiàn)在導航欄或工具欄上营勤。

為了修正這個錯誤灵嫌,必需設(shè)置scrollIndicatorInsets屬性。同contentInset屬性一樣葛作,scrollIndicatorInsets屬性也是UIEdgeInsets結(jié)構(gòu)體寿羞。設(shè)置垂直方向的襯墊值會限制垂直方向的滾動指示器顯示在襯墊意外的范圍,而且還會導致水平指示器顯示在contentInset所定義的矩形以外的范圍赂蠢。

設(shè)置contentInset屬性而不調(diào)整scrollIndicatorInsets屬性會導致滾動指示器被繪制在導航控件和工具欄上方绪穆,這不是我們想要的結(jié)果。所以,正確設(shè)置scrollIndicatorInsets屬性來同contentInset屬性配合會修正這一問題玖院。

表1-4顯示了修正過后的loadView方法菠红,添加了scrollIndicatorInsets屬性的初始值。

- (void)loadView {
    CGRect fullScreenRect=[[UIScreen mainScreen] applicationFrame];
    scrollView=[[UIScrollView alloc] initWithFrame:fullScreenRect];
    scrollView.contentSize=CGSizeMake(320,758);
    scrollView.contentInset=UIEdgeInsetsMake(64.0,0.0,44.0,0.0);
    scrollView.scrollIndicatorInsets=UIEdgeInsetsMake(64.0,0.0,44.0,0.0);
    // do any further configuration to the scroll view
    // add a view, or views, as a subview of the scroll view.
    // release scrollView as self.view retains it
    self.view=scrollView;
    [scrollView release];
}

滾動滾動視圖的內(nèi)容

最常見的發(fā)起滾動視圖開始滾動的方式是由用戶觸摸屏幕并用手指拖拽难菌。內(nèi)容的滾動是對動作的回應试溯。這個手勢被稱為拖動手勢(drag)

拖拽手勢延伸出滑動手勢郊酒∮鼋剩滑動是用戶使用手指在屏幕上進行快速的接觸,并將手指滑向想要滾動的方向燎窘,然后手指離開屏幕摹闽。這個手勢不僅會造成滾動,還會給滾動施加一個動量褐健,基于用戶滑動動作的速度付鹿,會讓視圖在手持完成后繼續(xù)滾動。滾動在一段事件里會慢慢減速至停止铝量√纫伲滑動手勢允許用戶使用一個動作就讓視圖運行一大段距離。在減速時慢叨,用戶可以通過觸摸屏幕來停止?jié)L動纽匙。所有這些行為都內(nèi)建在UIScrollView類當中,不需要開發(fā)者來實現(xiàn)拍谐。

但有些時候需要應用通過代碼的方式進行滾動內(nèi)容烛缔,例如,為了展示一個文件的特定部分轩拨。在這種情況下践瓷,UIScrollView會提供必須方法來實現(xiàn)這一效果。

UIScrollView類的代理協(xié)議UIScrollViewDelegate提供了允許應用追中滾動進度亡蓉,以及響應應用的特定要求的方法晕翠。

利用代碼實現(xiàn)滾動

滾動滾動視圖的內(nèi)容并不總是為了響應用戶在屏幕上的拖動或滑動手勢。有時應用需要將視圖滾動至特定的內(nèi)容砍濒,以顯示一個特定的矩形區(qū)域淋肾,或者要滾動至視圖的最上部。UIScrollView類提供了實現(xiàn)這些動作的方法爸邢。

滾動至偏移位置

滾動至一個特定的左上位置(contentOffset屬性)可以通過兩種方式完成樊卓。setContentOffset:animated:方法會將內(nèi)容滾動至特定的偏移位置。如果動畫參數(shù)為YES杠河,從現(xiàn)有位置到特定位置的滾動會被加上一個特定速率的動畫效果碌尔。如果動畫參數(shù)是NO浇辜,滾動會立即完成,不會有動畫效果唾戚。在上面的兩種情況下柳洋,都會向代理發(fā)送scrollViewDidScroll:消息。如果關(guān)閉動畫叹坦,或通過contentOffset屬性直接設(shè)置偏移量膳灶,代理只會收到scrollViewDidScroll:消息。如果開啟動畫立由,代理會在動畫進行過程中收到一系列scrollViewDidScroll:消息轧钓。當動畫完成時,代理收到scrollViewDidEndScrollingAnimation:消息锐膜。

顯示矩形

還可以滾動一個矩形區(qū)域毕箍,讓其可見。這在當應用需要顯示當前處在可見區(qū)域外的控件時十分有用道盏。scrollRectToVisible:animated:方法會滾動特定矩形而柑,使其在滾動視圖中可見。如果動畫參數(shù)為YES荷逞,矩形會在特定速率下被滾動至視圖媒咳。同setContentOffset:animated一樣,如果關(guān)閉動畫效果种远,代理只會收到一條scrollViewDidScroll:消息涩澡。如果動畫開啟,代理會在動畫過程中收到一系列scrollViewDidScroll:消息坠敷。在調(diào)用scrollRectToVisible:animated:方法期間妙同,滾動視圖的追蹤和屬性都為NO。

scrollRectToVisible:animated:中開啟了動畫膝迎,代理最后會收到scrollViewDidEndScrollingAnimation:消息粥帚,作為滾動視圖已經(jīng)到達特定地點,動畫完結(jié)的通知限次。

滾動至上部

在狀態(tài)欄可見的情況下芒涡,可以通過單擊狀態(tài)欄的方式使?jié)L動視圖滾動至最上方。這個動作在展示一組垂直排列的數(shù)據(jù)的應用里非常常見卖漫。例如费尽,照片應用支持滾動到頂部,在相冊的選擇視圖中和相片列表視圖中都可以懊亡,大多數(shù)UIView類的實現(xiàn)(UIScrollView的子類)也支持滾動至頂部依啰。

應用可通過實現(xiàn)滾動視圖代理協(xié)議中的scrollViewShouldScrollToTop:并返回YES來實現(xiàn)這個功能乎串。這個代理方法允許允許屏幕上存在多個滾動視圖時店枣,返回其中某一個速警,將其的窗口滾動至最上部。

當滾動完成時鸯两,代理會收到scrollViewDidScrollToTop:消息闷旧,表明完成動作的視圖對象。

在滾動期間發(fā)送代理消息

在滾動期間钧唐,滾動視圖會使用tracking忙灼,draggingdecelerating以及zooming屬性來追蹤滾動視圖的狀態(tài)钝侠。除此之外该园,contentOffset屬性定義了內(nèi)容中同滾動視圖的左上邊界的一個可見點。下面的表格描述了這些屬性:

  • tracking:如果用戶的手指在接觸設(shè)備屏幕帅韧,屬性值為YES

  • dragging:如果用戶的手指接觸屏幕并拖動里初,屬性值為YES

  • decelerating:如果視圖由于滑動手勢而產(chǎn)生減速運動,或由于拖動手勢導致視圖移出滾動視圖的框架范圍而產(chǎn)生回彈效果忽舟,屬性值為YES

  • zooming:如果滾動視圖正在追蹤一個改變其zoomScale屬性的捏合動作双妨,屬性值為YES

  • contentOffset:一個CGPoint值,定義了滾動視圖邊界左上角的一個點

不需要通過監(jiān)控這些屬性來決定滾動過程中的動作叮阅,因為滾動視圖會向其代理發(fā)送一個詳細的信息序列刁品,表示滾動動作的進程。這些方法允許應用根據(jù)需要響應浩姥。代理方法可以查詢狀態(tài)屬性來決定是否要接收這些消息或者滾動視圖當前的位置挑随。

簡單方法:追蹤一個滾動動作的起始和結(jié)束

如果應用只對滾動過程的起始和結(jié)束感興趣,那么只要實現(xiàn)代理方法的一小部分即可勒叠。

實現(xiàn)scrollViewBeginDragging:方法镀裤,以便當拖動開始時接收通知。

為了確定滾動是否完成缴饭,必需實現(xiàn)兩個代理方法:scrollViewDidEndDragging:willDecelerate:scrollViewDidEndDecelerating:方法暑劝。滾動的結(jié)束要么是代理對象收到scrollViewDidEndDragging:willDecelerate:消息,其中減速參數(shù)為NO颗搂,要么是代理收到scrollViewDidEndDecelerating:消息担猛。不管那種情況,滾動都已經(jīng)完成丢氢。

完整的代理消息序列

當用戶觸摸屏幕時追蹤序列開始傅联。tracking屬性立刻被設(shè)置為YES,并且只要用戶的手指在接觸屏幕疚察,都會為YES蒸走,不管手指是否移動。

如果手指保持精致貌嫡,而且內(nèi)容視圖響應了觸摸事件比驻,那么就應該處理觸摸事件该溯,序列結(jié)束。

然而别惦,如果用戶移動手指狈茉,序列會繼續(xù)。

當用戶開始移動手指掸掸,發(fā)起滾動視圖氯庆,視圖會第一次嘗試(假設(shè)這是滾動視圖的默認值)取消所有進行中的事件處理,如果它正在嘗試這樣做扰付。

注:貫穿整個消息序列堤撵,很有可能trackingdragging屬性會一直保持為NO,zooming屬性保持為YES羽莺。這種情況發(fā)生在滾動的結(jié)果是縮放動作時粒督,不管滾動是由手勢還是代碼引起的。當然禽翼,如果需要屠橄,讀者可以讓由縮放或滾動產(chǎn)生的代理方法選擇其它的動作。

滾動視圖的dragging屬性設(shè)置為YES闰挡,其代理會收到scrollViewWillBeginDragging:消息锐墙。

隨著用戶拖動手指,scrollViewDidScroll:消息會發(fā)送給代理长酗。這個消息會隨著滾動的進行而不斷發(fā)送溪北。這個方法的實現(xiàn)可以查詢滾動視圖的contentOffset屬性來確定滾動視圖邊界左上角的位置。contentOffset屬性總是滾動視圖邊界左上角的當前位置夺脾,不管視圖是否在滾動之拨。

如果讀者使用滑動手勢,tracking屬性會被設(shè)置為NO咧叭,這是為了實現(xiàn)滑動手勢蚀乔,用戶的手指在接觸到屏幕的一瞬間,會使得視圖開始滑動菲茬,隨后會離開屏幕吉挣。此時,代理會收到scrollViewDidEndDragging:willDecelerate:消息婉弹。由于滾動需要減速睬魂,所以減速參數(shù)為YES。減速的速度由decelerationRate屬性控制镀赌。默認情況下氯哮,這個屬性的值是UIScrollViewDecelerationRateNormal,會使得滾動持續(xù)相當長的一段時間商佛。也可將速率設(shè)置為UIScrollViewDecelerationFast來讓減速時間大大減少喉钢,那么滑動手指之后的滾動距離會大大減少姆打。在視圖減速期間,decelerating屬性會被設(shè)置為YES出牧。

如果用戶拖動,停止拖動以及將手指從屏幕移開歇盼,代理會收到scrollViewDidEnding:willDecelerate:消息舔痕,然而減速參數(shù)為NO。這是因為用戶并沒有給滾動視圖施加動量豹缀。由于用戶的手指不再接觸屏幕伯复,此時tracking屬性會被設(shè)置為NO。

如果scrollViewDidEndDragging:willDecelerate消息的減速參數(shù)是NO邢笙,那么滾動視圖的代理對象就不會再收到關(guān)于這個拖動動作的代理消息啸如。滾動視圖的減速屬性因此也會返回NO。

還有一種情況會導致scrollViewDidEndDragging:willDecelerate發(fā)送給代理氮惯,即使用戶在手指靜止的狀態(tài)下將手指抬起叮雳。如果滾動視圖被設(shè)置為在用戶將內(nèi)容拖動至滾動邊界以外時會產(chǎn)生回彈的視覺效果時,scrollViewDidEndDragging:willDecelerate消息會發(fā)送給代理對象妇汗,而且減速參數(shù)會為YES帘不。當bounces屬性設(shè)為YES會開啟回彈(默認值)。當bounces屬性為NO時杨箭,alwaysNouceVerticalalwaysBounceHorizontal屬性不會影響滾動視圖的行為寞焙。如果bounces為YES,它們會在contentSize屬性小于視圖邊界的情況下允許回彈互婿。(bounces屬性開啟時捣郊,內(nèi)容尺寸大于視圖尺寸時會回彈)

不管在何種情況下視圖會發(fā)送scrollViewDidEndDragging:willDecelerate消息,如果減速參數(shù)為YES慈参,滾動視圖就會發(fā)送scrollViewWillBeginDecelerating:消息呛牲。在減速期間,代理繼續(xù)接收scrollViewdidScroll:消息驮配,盡管當前trackingdragging屬性的值都是NO侈净。decelerating屬性繼續(xù)為YES。

最后僧凤,當滾動視圖的減速結(jié)束時畜侦,代理會收到scrollViewDidEndDecelerating:消息,decelerating屬性為NO躯保,滾動序列結(jié)束旋膳。

捏合手勢的基本縮放

通過點擊縮放

使用翻頁模式滾動

嵌套滾動視圖

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市途事,隨后出現(xiàn)的幾起案子验懊,更是在濱河造成了極大的恐慌擅羞,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件义图,死亡現(xiàn)場離奇詭異减俏,居然都是意外死亡,警方通過查閱死者的電腦和手機碱工,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門娃承,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人怕篷,你說我怎么就攤上這事历筝。” “怎么了廊谓?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵梳猪,是天一觀的道長。 經(jīng)常有香客問我蒸痹,道長春弥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任叠荠,我火速辦了婚禮惕稻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蝙叛。我一直安慰自己俺祠,他們只是感情好,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布借帘。 她就那樣靜靜地躺著蜘渣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪肺然。 梳的紋絲不亂的頭發(fā)上蔫缸,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天,我揣著相機與錄音际起,去河邊找鬼拾碌。 笑死,一個胖子當著我的面吹牛街望,可吹牛的內(nèi)容都是我干的校翔。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼灾前,長吁一口氣:“原來是場噩夢啊……” “哼防症!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤蔫敲,失蹤者是張志新(化名)和其女友劉穎饲嗽,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體奈嘿,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡貌虾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了裙犹。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片尽狠。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖伯诬,靈堂內(nèi)的尸體忽然破棺而出晚唇,到底是詐尸還是另有隱情巫财,我是刑警寧澤盗似,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站平项,受9級特大地震影響赫舒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜闽瓢,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一接癌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧扣讼,春花似錦缺猛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至销钝,卻和暖如春有咨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蒸健。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工座享, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人似忧。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓渣叛,卻偏偏與公主長得像,于是被迫代替她去往敵國和親盯捌。 傳聞我的和親對象是個殘疾皇子诗箍,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354

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