轉自: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