iOS自定義時間選擇器(Swift)

先上效果圖

未選中時樣式
選中時的樣式

之前項目中要用到時間選擇器睛廊,時間比較緊就大概寫了個形真,湊合能用。閑下來了超全,這幾天把這個重新寫了下咆霜。大家可以看下效果,這里選中的那個效果的顏色和透明度都可以調(diào)嘶朱,還有星期和日期label的textColor都可以設(shè)置蛾坯,其余的不行。感覺項目上用的話改動不是太多的話直接用cocoapods管理吧疏遏。pod search YSXChooseTime_Swift脉课。
如果改動較多的話,源碼在github上财异。就是以Date開頭的那3個文件倘零,自己下下來根據(jù)自己的需求改改。選中后能得到的數(shù)據(jù)就是第二張圖上面顯示的那些戳寸。功能確實也很單一视事。


下來說說我實現(xiàn)的思路吧

首先一頁要顯示7天,往前滑日期減小庆揩,往后滑日期增大俐东。在這要顯示的日期的整個控件我選擇UIScrollView。建立三個和屏幕寬度(就是你設(shè)置日期選擇器的高度和寬度)一樣的view订晌。為了后面方便虏辫,這3個view依次為leftView、midView锈拨、RightView砌庄。然后將這3個view依次添加進UIScrollView中。初始時設(shè)置midView中包含今天在內(nèi)的某一周奕枢,leftView為前一周娄昆,rightView為后一周。在這里再用三個變量toDay(今天)firstDay(包含toDay的周的星期一)lastDay(包含toDay的周的星期天)缝彬。
根據(jù)toDay算出firstDay和lastDay萌焰。然后將得到的數(shù)據(jù)顯示到midView上。再根據(jù)firstDay算出前一周的數(shù)據(jù)谷浅,將這些數(shù)據(jù)設(shè)置到leftView上扒俯。最后根據(jù)rightDay算出后一周的數(shù)據(jù)奶卓,將這些數(shù)據(jù)設(shè)置到rightView上。然后設(shè)置UIScrollView的偏移量為一個view的寬度撼玄,我這里view的寬度和屏幕的寬度設(shè)置的一樣夺姑。

self.contentOffset = CGPoint(x: self.bounds.size.width, y: 0)

這樣設(shè)置完之后UIScrollView第一次顯示時會顯示midView,也就是包含當天的那一周。

下來就是左右滑動時數(shù)據(jù)該怎么處理和顯示

leftView,midView,rightView肯定是要復用的掌猛,要不然每滑動一次就創(chuàng)建一個view效率太低盏浙!
在做滑動處理時我選擇的是scrollViewDidEndDecelerating
而不是scrollViewDidScroll。原因是scrollViewDidEndDecelerating是在滑動結(jié)束后才會調(diào)用荔茬,
scrollViewDidScroll是每次滑動都會調(diào)用很多次废膘。而且還有個最理想的地方是設(shè)置UIScrollView的偏移量時
self.contentOffset = CGPoint(x: self.bounds.size.width, y: 0)
不會觸發(fā)scrollViewDidEndDecelerating。這個是很有用的兔院。

下來就很簡單了殖卑,在每次滑動完之后判斷是向右滑動了還是向左滑動了站削。這里用向左滑動說明下(向左滑動手指向左坊萝,在時間選擇器上是顯示下一周)。
這時UIScrollView顯示的是```rightView```也就是當前周的下一周许起。然后根據(jù)```lastDay```重新設(shè)置```midView```上的數(shù)據(jù)十偶,使其顯示的數(shù)據(jù)和```rightView```上的一致。然后更新```firstDay```和```lastDay```园细,再更新```leftView```和```rightView```上的數(shù)據(jù)惦积。然后再設(shè)置UIScrollView的偏移量```self.contentOffset = CGPoint(x: self.bounds.size.width, y: 0)```又會顯示```midView```。此時的```midView```上顯示的是當前周的下一周猛频,```leftView```顯示的是當前周狮崩,```rightView```顯示的是當前周的下下周。向右滑動的處理方式和向左的處理方式相同鹿寻。就可以利用3個view來顯示一個時間選擇器睦柴。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市毡熏,隨后出現(xiàn)的幾起案子坦敌,更是在濱河造成了極大的恐慌,老刑警劉巖痢法,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件狱窘,死亡現(xiàn)場離奇詭異,居然都是意外死亡财搁,警方通過查閱死者的電腦和手機蘸炸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來尖奔,“玉大人幻馁,你說我怎么就攤上這事洗鸵。” “怎么了仗嗦?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵膘滨,是天一觀的道長。 經(jīng)常有香客問我稀拐,道長火邓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任德撬,我火速辦了婚禮铲咨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蜓洪。我一直安慰自己纤勒,他們只是感情好,可當我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布隆檀。 她就那樣靜靜地躺著摇天,像睡著了一般。 火紅的嫁衣襯著肌膚如雪恐仑。 梳的紋絲不亂的頭發(fā)上泉坐,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天,我揣著相機與錄音裳仆,去河邊找鬼腕让。 笑死,一個胖子當著我的面吹牛歧斟,可吹牛的內(nèi)容都是我干的纯丸。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼静袖,長吁一口氣:“原來是場噩夢啊……” “哼觉鼻!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起勾徽,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤滑凉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后喘帚,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體畅姊,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年吹由,在試婚紗的時候發(fā)現(xiàn)自己被綠了若未。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡倾鲫,死狀恐怖粗合,靈堂內(nèi)的尸體忽然破棺而出萍嬉,到底是詐尸還是另有隱情,我是刑警寧澤隙疚,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布壤追,位于F島的核電站,受9級特大地震影響供屉,放射性物質(zhì)發(fā)生泄漏行冰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一伶丐、第九天 我趴在偏房一處隱蔽的房頂上張望悼做。 院中可真熱鬧,春花似錦哗魂、人聲如沸肛走。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽朽色。三九已至,卻和暖如春庶灿,著一層夾襖步出監(jiān)牢的瞬間纵搁,已是汗流浹背吃衅。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工往踢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人徘层。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓峻呕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親趣效。 傳聞我的和親對象是個殘疾皇子瘦癌,可洞房花燭夜當晚...
    茶點故事閱讀 45,573評論 2 359

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