在滾動過程中,實際上是在修改原點座標
當手指觸摸後, scroll view會暫時攔截觸摸事件,使用一個計時器,假如在計時器到點後,沒有發生手指移動事件,那麼,scroll view發送tracking events到被點擊的subview(此時劃不動)
假如在計時器到點前,發生了移動事件,那麼 scroll view 取消tracking本身發生滾動(能夠滾動)
子類能夠重載touchesShouldBegin:withEvent:inContentView: 決定本身是否接收touch事件
pagingEnabled當值是YES,會自動滾動到subview的邊界,默認是NO
touchesShouldCancelInContentView: 開始發送tracking messages消息給subview的時候
調用這個方法,決定是否發送tracking messages消息到subview,假如返回NO,發送,YES則不發送
假如 canCancelContentTouches屬性是NO,則不調用這個方法
來影響如何處理滾動手勢
scroll view還處理縮放和平移手勢html
要實現縮放和平移,必須實現委託viewForZoomingInScrollView:算法
scrollViewDidEndZooming:withView:atScale:.net
兩個方法,另外 maximumZoomScale和minimumZoomScale兩個屬性要不同
幾個屬性
tracking 當touch後尚未拖動的時候,值是YES,不然NOhtm
zoomBouncing 當內容放大到最大或者最小的時候,值是YES,不然NOblog
zooming 當正在縮放的時候,值是YES,不然NO繼承
decelerating 當滾動後,手指放開,可是還在繼續滾動中,這個時候是 YES,其餘是NO事件
decelerationRate 設置手指放開後的減速率圖片
maximumZoomScale 一個浮點數,表示能放最大的倍數ci
minimumZoomScale 一個浮點數,表示能縮最小的倍數it
pagingEnabled 當值是YES,會自動滾動到subview的邊界,默認是NO
scrollEnabled 決定是否能夠滾動
delaysContentTouches
是 個布爾值,當值是YES的時候,用戶觸碰開始,scroll view要延遲一會,看看是否用戶有意圖滾動,假如滾動了,那麼捕捉touch-down事件,不然就不捕捉, 假如值是NO,當用戶觸碰, scroll view會當即觸發touchesShouldBegin:withEvent:inContentView:, 默認是YES
UIScrollView的最大屬性就是能夠滾動,那種效果很好看,其實滾動的效果主要的原理是修改他的座標,準確的講是修改原點座標,而 UIScrollView跟其餘組件的都同樣,有本身的delegate,在.h文件中要繼承UIScrollView的delegate而後在.m文件 的viewDidLoad設置的delegate爲self。以下:
view plain
sv.pagingEnabled = YES;
sv.backgroundColor = [UIColor blueColor];
sv.showsVerticalScrollIndicator = NO;
sv.showsHorizontalScrollIndicator = NO;
sv.delegate = self;
CGSize newSize = CGSizeMake(self.view.frame.size.width * 2, self.view.frame.size.height);
[sv setContentSize:newSize];
[self.view addSubview: sv];在上面的代碼中,必定要設置UIScrollView的pagingEnable爲YES。否則你就是設置好了其餘屬性,它仍是沒法拖動,接下去的分別是 設置背景顏色和是否顯示水平和豎直拖動條,最後最重要的設置他的ContentSize,ContentSize的意思就是它全部內容的大小,這個和它的 Frame是不同的,只有ContentSize的大小大於Frame這樣才能夠支持拖動。
(3)結合UIPageControl作新聞翻頁效果
初始化UIPageControl的方法都很簡單,就是上面講的alloc和init,不過你們要記住的一點就是若是你定義了全局變量必定要在delloc那裏釋放掉。
UIPageControl有一個userInteractionEnabled你能夠設置它爲NO。就是點擊的時候它不調用任何方法。而後設置它的currentPage 爲0,並把它加到view上去。
接下來在UIScrollView的delegate方法:
view plain
- (void)scrollViewDidScroll:(UIScrollView *)scrollView;
在這裏你能夠寫上關於UIPageControl的頁面設置的算法。以下
view plain
int index = fabs(scrollView.contentOffset.x) /scrollView.frame.size.width;
pageControl.currentPage = index;
(4)其餘的
UIScrollView還支持處理縮放的動做,好比圖片的縮小或者地圖。
可是必須實現它的委託viewForZoomingInScrollView:
scrollViewDidEndZooming:withView:atScale:而後它的兩個屬性maximumZoomScale和minimumZoomScale 要不同。這樣就能基本實現圖片的縮放了。