iOS控件之UIScrollView

創(chuàng)建

UIScrollView * scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(50, 50, 200, 800)];

基礎(chǔ)屬性

// 背景色

scrollView.backgroundColor = [UIColor redColor];

// 內(nèi)容視圖的大小

// 如果不設(shè)置該屬性,scrollView無法滑動(dòng)(即使添加了超出控件大小的子視圖依然不能滑動(dòng))
scrollView.contentSize = CGSizeMake(200, 400);  

// 內(nèi)容視圖的偏移量

scrollView.contentOffset = CGPointMake(30, 30); // (30,30)偏移量代表控件左上角位于內(nèi)容視圖燥筷,左30下30箩祥,負(fù)值方向相反
// 如果想在設(shè)置內(nèi)容視圖偏移量的時(shí)候有動(dòng)畫就用這個(gè)方法
- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated;
示意圖:紅色為內(nèi)容視圖,黑框?yàn)榭丶笮?此時(shí)偏移量為(30,30)

// 滾動(dòng)到矩形可見的最近邊緣

- (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated;

// 內(nèi)容視圖邊緣嵌入的間距

scrollView.contentInset = UIEdgeInsetsMake(30, 30, 10, 10);  // UIEdgeInsetsMake(上, 左, 下, 右)
示意圖:紅色為內(nèi)容視圖,黃色為嵌入間距區(qū)域,黑框?yàn)榭丶?藍(lán)色為添加在scrollView上的子視圖(注意子視圖的frame)

// 彈簧效果

scrollView.bounces = NO; // 默認(rèn)為YES 取消設(shè)置NO
// 當(dāng)bounces屬性為NO時(shí),以下兩個(gè)屬性設(shè)置無效
scrollView.alwaysBounceHorizontal = YES; // 水平方向彈簧效果
scrollView.alwaysBounceVertical = YES; // 垂直方向彈簧效果

// 減速的速度

scrollView.decelerationRate = 0.1; // 值域 0~1 值越小減速停止的時(shí)間越短

// 只在一個(gè)方向上滾動(dòng)

scrollView.directionalLockEnabled = YES; // 默認(rèn)為NO肆氓,設(shè)置為YES內(nèi)容視圖只在一個(gè)方向上滾動(dòng)

// 是否能滾動(dòng)

scrollView.scrollView = NO; // 默認(rèn)為YES袍祖,設(shè)置NO不能滑動(dòng)

// 點(diǎn)擊狀態(tài)欄滾動(dòng)到頂部

scrollView.scrollsToTop = YES; // 默認(rèn)為YES,設(shè)置為NO點(diǎn)擊轉(zhuǎn)態(tài)欄不能滑動(dòng)到頂部

// 整頁滾動(dòng)

scrollView.pagingEnabled = YES; // 默認(rèn)為NO谢揪,設(shè)置YES內(nèi)容視圖整頁滾動(dòng)

// 延遲內(nèi)容觸動(dòng)

scrollView.delaysContentTouches = YES; 
// 是個(gè)布爾值蕉陋,當(dāng)值是 YES 的時(shí)候捐凭,用戶觸碰開始,scroll view要延遲一會(huì)凳鬓,看看是否用戶有意圖滾動(dòng)茁肠。假如滾動(dòng)了,那么捕捉 touch-down 事件缩举,否則就不捕捉垦梆。假如值是NO,當(dāng)用戶觸碰蚁孔, scroll view 會(huì)立即觸發(fā) touchesShouldBegin:withEvent:inContentView:奶赔,默認(rèn)是 YES

參考:http://blog.csdn.net/ch_soft/article/details/6947695

// 取消內(nèi)容觸動(dòng)

scrollView.canCancelContentTouches = YES;
// 當(dāng)值是 YES 的時(shí)候惋嚎,用戶觸碰后杠氢,然后在一定時(shí)間內(nèi)沒有移動(dòng),scrollView 發(fā)送 tracking events另伍,然后用戶移動(dòng)手指足夠長度觸發(fā)滾動(dòng)事件鼻百,這個(gè)時(shí)候,scrollView 發(fā)送了 touchesCancelled:withEvent: 到 subview摆尝,然后 scroView 開始滾動(dòng)温艇。假如值是 NO,scrollView 發(fā)送 tracking events 后堕汞,就算用戶移動(dòng)手指勺爱,scrollView 也不會(huì)滾動(dòng)

// 隱藏鍵盤樣式

typedef NS_ENUM(NSInteger, UIScrollViewKeyboardDismissMode) {
    UIScrollViewKeyboardDismissModeNone,        // 不作為
    UIScrollViewKeyboardDismissModeOnDrag,      // 拖拽視圖隱藏鍵盤
    UIScrollViewKeyboardDismissModeInteractive, // 交互式的隱藏
} NS_ENUM_AVAILABLE_IOS(7_0);

// 獲取各種狀態(tài)

@property(nonatomic,readonly,getter=isTracking)     BOOL tracking;        // 當(dāng)touch后還沒有拖動(dòng)的時(shí)候值是YES,否則NO
@property(nonatomic,readonly,getter=isDragging)     BOOL dragging;        // 是否正在拖動(dòng)
@property(nonatomic,readonly,getter=isDecelerating) BOOL decelerating;    // 是否正在減速
@property(nonatomic,readonly,getter=isZooming)       BOOL zooming;       // 是否正在縮放
@property(nonatomic,readonly,getter=isZoomBouncing)  BOOL zoomBouncing;  // 當(dāng)內(nèi)容放大到最大或者最小產(chǎn)生反彈效果時(shí)候值是YES讯检,否則NO

// 相關(guān)手勢

@property(nonatomic, readonly) UIPanGestureRecognizer *panGestureRecognizer NS_AVAILABLE_IOS(5_0);
// 拖拽手勢
@property(nullable, nonatomic, readonly) UIPinchGestureRecognizer *pinchGestureRecognizer NS_AVAILABLE_IOS(5_0);
// 捏合手勢
@property(nonatomic, readonly) UIGestureRecognizer *directionalPressGestureRecognizer UIKIT_AVAILABLE_TVOS_ONLY(9_0); 
// 定向媒體手勢

滾動(dòng)指示條相關(guān)

// 滾動(dòng)條樣式

scrollView.indicatorStyle = UIScrollViewIndicatorStyleDefault;
typedef NS_ENUM(NSInteger, UIScrollViewIndicatorStyle) {
    UIScrollViewIndicatorStyleDefault,     // 默認(rèn)樣式
    UIScrollViewIndicatorStyleBlack,       // 黑色樣式
    UIScrollViewIndicatorStyleWhite        // 白色樣式
};

// 隱藏琐鲁、顯示滾動(dòng)指示條

scrollView.showsHorizontalScrollIndicator = NO; // 水平方向
scrollView.showsVerticalScrollIndicator = NO; // 垂直方向
// 默認(rèn)值都是YES,隱藏設(shè)置為NO

// 調(diào)用滾動(dòng)指示條

- (void)flashScrollIndicators; // 調(diào)用這個(gè)方法 滾動(dòng)條會(huì)顯示一下

// 滾動(dòng)條位置

scrollView.scrollIndicatorInsets = UIEdgeInsetsMake(30, 30, 0, 0);
// UIEdgeInsetsMake(top, left, bottom, right) top人灼、bottom分別是垂直方向滾動(dòng)條距上端下端距離围段,left、right分別是水平方向滾動(dòng)條距左端右端距離 

縮放相關(guān)

// 縮放比例

scrollView.zoomScale = 1.5f;   // 縮放比例
scrollView.minimumZoomScale = 0.5f; // 最小縮放比例
scrollView.maximumZoomScale = 3.0f; // 最大縮放比例

// 縮放反彈

scrollView.bouncesZoom = NO; // 默認(rèn)為YES投放,設(shè)置為NO取消縮放到極限時(shí)產(chǎn)生反彈效果

代理函數(shù)

// 設(shè)置代理

@property(nullable,nonatomic,weak) id<UIScrollViewDelegate>        delegate;

// 代理函數(shù)

// 滑動(dòng)時(shí)多次調(diào)用奈泪,offset值改變即滑動(dòng)過程中,便會(huì)調(diào)用該代理函數(shù)
- (void)scrollViewDidScroll:(UIScrollView *)scrollView;  
                 
// 縮放時(shí)多次調(diào)用灸芳,zoomScale值改變即縮放過程中涝桅,便會(huì)調(diào)用該函數(shù)
- (void)scrollViewDidZoom:(UIScrollView *)scrollView NS_AVAILABLE_IOS(3_2); 


// 開始滑動(dòng)時(shí)調(diào)用,只調(diào)用一次烙样,手指不松開只算一次
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;

// 結(jié)束滑動(dòng)時(shí)調(diào)用冯遂,只調(diào)用一次,手指離開時(shí)執(zhí)行
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset NS_AVAILABLE_IOS(5_0);


// 已經(jīng)結(jié)束滾動(dòng)時(shí)調(diào)用误阻,只調(diào)用一次债蜜,當(dāng)手指離開達(dá)成時(shí)執(zhí)行
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate;


// 開始減速時(shí)調(diào)用晴埂,只調(diào)用一次,當(dāng)內(nèi)容視圖開始減速狀態(tài)執(zhí)行
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView;

// 結(jié)束減速時(shí)調(diào)用寻定,只調(diào)用一次儒洛,當(dāng)內(nèi)容視圖結(jié)束減速狀態(tài)執(zhí)行
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;    


// 滾動(dòng)動(dòng)畫結(jié)束時(shí)調(diào)用,沒有動(dòng)畫則不調(diào)用
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView; 


// 返回將要縮放的UIView對(duì)象狼速,調(diào)用多次
- (nullable UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView;

// 開始縮放時(shí)調(diào)用琅锻,只調(diào)用一次
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(nullable UIView *)view NS_AVAILABLE_IOS(3_2); 

// 已經(jīng)結(jié)束縮放時(shí)調(diào)用,只調(diào)用一次
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(nullable UIView *)view atScale:(CGFloat)scale;


// 當(dāng)用戶點(diǎn)擊狀態(tài)欄內(nèi)容視圖是否滾動(dòng)到頂部
- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView;  

// 滾動(dòng)到頂部時(shí)調(diào)用 
- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView;

版權(quán)聲明:出自MajorLMJ技術(shù)博客的原創(chuàng)作品 向胡,轉(zhuǎn)載時(shí)必須注明出處及相應(yīng)鏈接恼蓬!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市僵芹,隨后出現(xiàn)的幾起案子处硬,更是在濱河造成了極大的恐慌,老刑警劉巖拇派,帶你破解...
    沈念sama閱讀 221,548評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件荷辕,死亡現(xiàn)場離奇詭異,居然都是意外死亡件豌,警方通過查閱死者的電腦和手機(jī)疮方,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來茧彤,“玉大人骡显,你說我怎么就攤上這事≡啵” “怎么了惫谤?”我有些...
    開封第一講書人閱讀 167,990評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長遭殉。 經(jīng)常有香客問我石挂,道長,這世上最難降的妖魔是什么险污? 我笑而不...
    開封第一講書人閱讀 59,618評(píng)論 1 296
  • 正文 為了忘掉前任痹愚,我火速辦了婚禮,結(jié)果婚禮上蛔糯,老公的妹妹穿的比我還像新娘拯腮。我一直安慰自己,他們只是感情好蚁飒,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評(píng)論 6 397
  • 文/花漫 我一把揭開白布动壤。 她就那樣靜靜地躺著,像睡著了一般淮逻。 火紅的嫁衣襯著肌膚如雪琼懊。 梳的紋絲不亂的頭發(fā)上阁簸,一...
    開封第一講書人閱讀 52,246評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音哼丈,去河邊找鬼启妹。 笑死,一個(gè)胖子當(dāng)著我的面吹牛醉旦,可吹牛的內(nèi)容都是我干的饶米。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼车胡,長吁一口氣:“原來是場噩夢啊……” “哼檬输!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起匈棘,我...
    開封第一講書人閱讀 39,725評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤丧慈,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后羹饰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體伊滋,經(jīng)...
    沈念sama閱讀 46,268評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡碳却,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評(píng)論 3 340
  • 正文 我和宋清朗相戀三年队秩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片昼浦。...
    茶點(diǎn)故事閱讀 40,488評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡馍资,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出关噪,到底是詐尸還是另有隱情鸟蟹,我是刑警寧澤,帶...
    沈念sama閱讀 36,181評(píng)論 5 350
  • 正文 年R本政府宣布使兔,位于F島的核電站建钥,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏虐沥。R本人自食惡果不足惜熊经,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望欲险。 院中可真熱鬧镐依,春花似錦、人聲如沸天试。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽喜每。三九已至务唐,卻和暖如春雳攘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背枫笛。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評(píng)論 1 272
  • 我被黑心中介騙來泰國打工来农, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人崇堰。 一個(gè)月前我還...
    沈念sama閱讀 48,897評(píng)論 3 376
  • 正文 我出身青樓沃于,卻偏偏與公主長得像,于是被迫代替她去往敵國和親海诲。 傳聞我的和親對(duì)象是個(gè)殘疾皇子繁莹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評(píng)論 2 359

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

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件特幔、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,119評(píng)論 4 61
  • 內(nèi)容抽屜菜單ListViewWebViewSwitchButton按鈕點(diǎn)贊按鈕進(jìn)度條TabLayout圖標(biāo)下拉刷新...
    皇小弟閱讀 46,791評(píng)論 22 665
  • 有朋友問我蚯斯,還打算談戀愛嗎 “如果畢業(yè)之前薄风,我沒那么幸運(yùn),還遇不到眾人口中所說的靈魂伴侶的話拍嵌,我想遭赂,大概短期內(nèi)是不...
    騎著Dumbo的Mitian閱讀 513評(píng)論 0 1
  • 高中同學(xué)h,當(dāng)年坐在我前排的前排的前排的地理課代表横辆,男撇他,清秀,清高狈蚤,數(shù)學(xué)好困肩。嗯我挺喜歡他~每天偷看~~。當(dāng)h緩緩...
    白菜販閱讀 1,082評(píng)論 2 1
  • 圖片發(fā)自簡書App 翌日脆侮,許西凡早早地來到小面館锌畸,坐在老地方等著湯媛。 來這前許西凡請(qǐng)店里的同事凱倫給自己精心設(shè)計(jì)...
    七加閱讀 188評(píng)論 5 2