天天看點

scrollview的屬性解釋和分頁用法

轉自:http://blog.sina.com.cn/s/blog_8764c3140100wtoc.html

1. @property(nonatomic) BOOL bounces //當滾動到内容邊緣是否發生反彈,default is YES.

2. @property(nonatomic) BOOL alwaysBounceHorizontal; //是否隻在水準發生反彈,當内容到達

邊緣。。default is NO,

如果要隻在水準反彈那麼bounces必須為YES.

3. @property(nonatomic) BOOL alwaysBounceVertical   //當滾動到達邊緣時,是否隻有垂直邊緣才發生

反彈。default is no.

4. @property(nonatomic) BOOL bouncesZoom;   //當在縮放時,到達圖檔最大縮放倍數(maximumZoomScale)

或者是最小縮放倍數( minimumZoomScale)時,為了告訴使用者縮放倍數已達極限,是否發生動态反彈的效果來

告訴使用者。defaults is YES.

5. @property(nonatomic) BOOL canCancelContentTouches; //當手指觸摸螢幕後,并沒有開始拖動,而隔一段時間後

再開始拖動,這個屬性決定是否scorllView裡的圖檔是否會再繼續随着手指的滑動,而圖檔跟着滑動。defualt is

NO,圖檔會跟着手指滑動而滑動。

6. @property(nonatomic) CGPoint contentOffset; //scrollView裡的内容(如裡面存的圖檔)的原點,距離scrollView的

frame屬性裡的原點(origin)的距離。按照一般思維來說,如scrollView的frame為(0,0,320,480),而scrollView裡的

圖檔坐标為:(-320,0,320*2,480);那麼contentOffset應該為(-320,0),但實際上是(320,0),可能是為了友善設定,取為

正吧,反正contentOffset的x,y是不可能為負的,那樣代表滾動已到邊緣,發生反彈或者不能再往邊緣外拖動。

7. @property(nonatomic) CGSize contentSize; //scrollView裡能存儲圖檔最大size。比如scrollView為螢幕

大小,而要在裡面存放幾張螢幕大小的圖檔,那麼一定不能忘了在放圖檔之前設定contentSize.

8. @property(nonatomic, assign) id<UIScrollViewDelegate> delegate;  //scrollView的代理。如:

當要實作縮放圖檔時,必須實作UIScrollViewDelegate裡的兩個方法,且最大、最小縮放倍數必須不一樣maximumZoomScale

,minimumZoomScale:

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView;  //傳回要縮放的圖檔(必須在代理類裡實作)

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale;

//重新确定縮放完後的縮放倍數.

常用來縮放方法:- (void)zoomToRect:(CGRect)rect animated:(BOOL)animated,把從scrollView裡截取的矩形

區域縮放到整個scrollView目前可視的frame裡面。是以如果截取的區域大于scrollView的frame時,圖檔縮小,

如果截取區域小于frame,會看到圖檔放大。一般情況下rect需要自己計算出來。

比如,要把scrollView原來坐标點為(40,40)的内容周圍内容在scrollView裡放大一倍,可以求出需要從scrollView裡

截取圖檔的frame,當然主要是求截取圖檔坐标原點,可以想象,内容放大一倍,那麼截取圖檔的大小寬度肯定是

scrollView的frame大小一半。如下列方法:

- (CGRect) getRectWithScale:(float)scale andCenter:(float)center

{

 CGRect newRect;

 newRect.size.width=scrollView.frame.size.width/scale;

 newRect.size.height=scrollView.frame.size.height.scale;

 newRect.origin.x=center.x-newRect.size.width/2;

 newRect.origin.y=center.y-newRect.size.height/2;

 return newRect;

}

1. @property(nonatomic, getter=isDirectionalLockEnabled) BOOL directionalLockEnabled; //滾動方向的鎖定。

如果一開始拖動方向是水準或者垂直,且該屬性設定為YES,那麼另外一個方向将會被鎖定,不能在那個方向拖動了。如果

開始拖動方向為斜的,那麼不會禁止任何一個方向的拖動。

2. @property(nonatomic) UIScrollViewIndicatorStyle indicatorStyle; //拖動圖檔時,下面或者右側的那個滾動進度條

顯示的風格,當然也可以把這個滾動條取消。可以用下面屬性:

@property(nonatomic) BOOL showsHorizontalScrollIndicator; //是否顯示水準滾動條

@property(nonatomic) BOOL showsVerticalScrollIndicator; //是否顯示垂直滾動條,default is YES

3. @property(nonatomic) float maximumZoomScale; //最大縮放倍數

 @property(nonatomic) float minimumZoomScale; //最大縮小倍數

通常情況下,最小倍數比scrollView的frame要小,而最大縮放倍數可能與contentSize有關,需要自己算出

最大縮放倍數,如:如果想最大縮放倍數為5倍,那麼contentSize也應該設定為5倍scrollView的frame大小。

假如想要輕按兩下scrollView裡的圖檔放大,或者支援兩隻手指在螢幕捏放實作圖檔縮放,必須重寫覆寫繼承自

UIResponder的幾個互動方法:

﹣(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;

﹣(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;

﹣(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event; 

, getter=isPagingEnabled) BOOL pagingEnabled; //是否在拖動圖檔後,圖檔翻到

scrollView的下一個子視圖開始邊界. default is NO

@property(nonatomic, getter=isScrollEnabled) BOOL scrollEnabled; //是否可以滾動。default is YES,

如果設定為NO,那麼将scrollView将不會接受任何觸摸事件。

- (void)setZoomScale:(float)scale animated:(BOOL)animated;

轉自:君哥哥愛漂移的空間

UIScrollView分頁算法

    在使用 UIScrollView 分頁的時候我們如何确定目前是第幾頁?

    首先需要開啟分頁設定

    scrollView.pagingEnabled = YES;

    然後我們在委托的類上實作以下方法

      // 根據目前的x坐标和頁寬度計算出目前頁數

     int currentPage = floor((sender.contentOffset.x - pageWidth / 2) / pageWidth) + 1;

}    

frame.origin.x  的意思和作用?   

scrollView.frame

一個view的frame 包含它的矩形形狀(size)的長和寬。

和它在父視圖中的坐标原點(origin)x和y坐标  

frame  架構

origin就是所謂的起點位置

frame在ios裡并不是一個具體的對象,他隻是一些控件的一個屬性。

frame的值就是一個CGRect 包括(originX,originY,width,height)。

originX和originY對應着該對象在其superview中的坐标,也就是說他是一個相對坐标。

view 的frame是view在它的super view 的位置與尺寸。

UIView中bounds和frame的差别?

 什麼是絕對坐标值,相對坐标值?

絕對坐标是:X,Y    就是相對于坐标原點的。 

bounds是指這個view在它自己坐标系的坐标和大小 而frame指的是這個view在它superview的坐标系的坐标和大小,

差別主要在坐标系這一塊。

frame 是相對坐标。bounds是絕對坐标。

很明顯,bounds的原點是(0,0)點,而frame的原點卻是任意的。

frame 如果一個按鈕,是在表格裡,按鈕的frame 的坐标也是相對的,并不是相對螢幕,也就是說是相對坐标,不是絕對坐标。

很明顯一個是自己為原點的坐标系,一個是以螢幕為原點的坐标系。

原文http://www.cocoachina.com/bbs/simple/?t38761_5.html

繼續閱讀