常用控件UIScrollView

UIScrollView(包括它的子類UITableView和UICollectionView)是iOS開(kāi)發(fā)中最常用的UI組件灯荧,大部分App的核心界面都是基于三者之一或者三者的組合實(shí)現(xiàn)的步脓。UIScrollView是UIKit中為數(shù)不多的能響應(yīng)滑動(dòng)收拾的View歹颓,相比自己用手勢(shì)去實(shí)現(xiàn)欧引,UIScrollView的體驗(yàn)更好。

UIScrollView的常見(jiàn)屬性

//展示的大小
@property(nonatomic) CGRect frame;

//內(nèi)容的大小(可以滾動(dòng)的大小)
//如果想在水平方向不讓滾動(dòng)耐床,可以設(shè)置width=0澜公,也就是如果在垂直方向上不想滾動(dòng),可以設(shè)置height=0
@property(nonatomic) CGSize contentSize;

//設(shè)置scrollView能否滾動(dòng)
@property(nonatomic,getter=isScrollEnabled) BOOL          scrollEnabled;

//能否接收觸摸事件
@property (nonatomic, getter=isUserInteractionEnabled) BOOL userInteractionEnabled;

//表示scrollView滾動(dòng)的位置
//內(nèi)容左上角和scrollView的左上角的間距值
@property(nonatomic) CGPoint contentOffset;

//這個(gè)屬性能夠在UIScrollView的4周增加額外的滾動(dòng)區(qū)域
@property(nonatomic) UIEdgeInsets contentInset;

//設(shè)置UIScrollView是否需要彈簧效果
@property(nonatomic) BOOL bounces;

//是否顯示水平滾動(dòng)條
@property(nonatomic) BOOL showsHorizontalScrollIndicator;

//是否顯示垂直滾動(dòng)條
@property(nonatomic) BOOL showsVerticalScrollIndicator;

從網(wǎng)上找了一張圖片來(lái)描述UIScrollView的尺寸:

1.png

UIScrollView的常用代理

下面列出幾個(gè)常用的代理方法:

/**
 * 只要是拖動(dòng)萍歉,都會(huì)調(diào)用侣颂,調(diào)用頻率很高,官方的解釋是: any offset changes
 */
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
}

/**
 * 即將開(kāi)始拖拽的時(shí)候調(diào)用
 */
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
}

/**
 * 結(jié)束拖拽的時(shí)候調(diào)用
 */
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
}

/**
 * (減速完畢)由于慣性停止?jié)L動(dòng)的時(shí)候調(diào)用
 */
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
}

UIScrollView的縮放

  • 縮放需要設(shè)置的幾個(gè)點(diǎn):
    • 需要設(shè)置最大縮放比例和最小縮放比例
    • 需要指定縮放的內(nèi)容
      • 這個(gè)內(nèi)容需要在代理中返回
// 最小縮放比例
// 默認(rèn)是1.0
@property(nonatomic) CGFloat minimumZoomScale;

// 最大縮放比例
// 默認(rèn)是1.0 必須大于等于 minimumZoomScale
@property(nonatomic) CGFloat maximumZoomScale;

/**
 這個(gè)方法的返回值決定了要縮放的內(nèi)容(返回值只能是UIScrollView的子控件)
 */
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
}

/**
    只要縮放比例有變化枪孩,就會(huì)調(diào)用該方法
 */
- (void)scrollViewDidZoom:(UIScrollView *)scrollView
{
}

UIScrollView和UIPageControl的分頁(yè)

  • 只要將UIScrollView的pageEnabled屬性設(shè)置為YES憔晒,UIScrollView會(huì)被分割成多個(gè)獨(dú)立的頁(yè)面,里面的內(nèi)容就能進(jìn)行分頁(yè)展示蔑舞。
  • 一般使用分頁(yè)功能拒担,都會(huì)配合UIPageControl增強(qiáng)分頁(yè)效果

UIPageControl常用屬性如下:


//一共多少頁(yè)
@property(nonatomic) NSInteger numberOfPages;

//當(dāng)前顯示的頁(yè)碼
@property(nonatomic) NSInteger currentPage;

//只有一頁(yè)時(shí),是否需要隱藏頁(yè)碼指示器
@property(nonatomic) BOOL hidesForSinglePage;

//其他頁(yè)碼指示器的顏色
@property(nonatomic,retain) UIColor *pageIndicatorTintColor;

//當(dāng)前頁(yè)碼指示器的顏色
@property(nonatomic,retain) UIColor *currentPageIndicatorTintColor;

分頁(yè)的時(shí)候拖動(dòng)攻询,拖動(dòng)超過(guò)一半的時(shí)候放開(kāi)从撼,會(huì)自動(dòng)進(jìn)入到下一頁(yè),如果沒(méi)有超過(guò)一半钧栖,就還是停留在這一頁(yè)低零。這個(gè)時(shí)候我們?nèi)绻險(xiǎn)IPageControl同步進(jìn)行頁(yè)碼的更新的話,那么就需要在UIScrollView的代理方法中進(jìn)行頁(yè)碼的計(jì)算:

/**
 * 只要scrollView在滾動(dòng)拯杠,就會(huì)調(diào)用
 */
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    // 0.3 > (int)(0.3 + 0.5) > 0
    // 0.6 > (int)(0.6 + 0.5) > 1
    // 小數(shù)四舍五入為整數(shù) : (int)(小數(shù) + 0.5)
    self.pageControl.currentPage = (int)(scrollView.contentOffset.x / scrollView.frame.size.width + 0.5);
}

了解了這些掏婶,就可以做出輪播圖了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末阴挣,一起剝皮案震驚了整個(gè)濱河市气堕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖茎芭,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件揖膜,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡梅桩,警方通過(guò)查閱死者的電腦和手機(jī)壹粟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)宿百,“玉大人趁仙,你說(shuō)我怎么就攤上這事】岩常” “怎么了雀费?”我有些...
    開(kāi)封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)痊焊。 經(jīng)常有香客問(wèn)我盏袄,道長(zhǎng),這世上最難降的妖魔是什么薄啥? 我笑而不...
    開(kāi)封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任辕羽,我火速辦了婚禮,結(jié)果婚禮上垄惧,老公的妹妹穿的比我還像新娘刁愿。我一直安慰自己,他們只是感情好到逊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布铣口。 她就那樣靜靜地躺著,像睡著了一般蕾管。 火紅的嫁衣襯著肌膚如雪枷踏。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天掰曾,我揣著相機(jī)與錄音旭蠕,去河邊找鬼。 笑死旷坦,一個(gè)胖子當(dāng)著我的面吹牛掏熬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播秒梅,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼旗芬,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了捆蜀?” 一聲冷哼從身側(cè)響起疮丛,我...
    開(kāi)封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤幔嫂,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后誊薄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體履恩,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年呢蔫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了切心。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡片吊,死狀恐怖绽昏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情俏脊,我是刑警寧澤全谤,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站联予,受9級(jí)特大地震影響啼县,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜沸久,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望余蟹。 院中可真熱鬧卷胯,春花似錦、人聲如沸威酒。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)葵孤。三九已至担钮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間尤仍,已是汗流浹背箫津。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留宰啦,地道東北人苏遥。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像赡模,于是被迫代替她去往敵國(guó)和親田炭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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