ios-簡(jiǎn)易時(shí)鐘

下面教大家用CALayer做時(shí)鐘湿颅,不啰嗦了汰具,上圖上代碼舟舒。

#import"ViewController.h"

#define perSec6

#define perMin6

#define perHour30

#define angleToRadious(angle) ((angle)/180.0* M_PI)

@interfaceViewController()

@property(nonatomic,strong)CALayer*secLay;

@property(nonatomic,strong)CALayer*minLay;

@property(nonatomic,strong)CALayer*HourLay;

@end

@implementationViewController

- (void)viewDidLoad {

[superviewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

UIImageView*img = [[UIImageViewalloc]initWithImage:[UIImageimageNamed:@"timg.jpeg"]];

img.frame=CGRectMake(0,0,200,200);

img.center=self.view.center;

[self.viewaddSubview:img];

//分針

self.minLay= [[CALayeralloc]init];

self.minLay.frame=CGRectMake(0,0,2,80);

//position這個(gè)坐標(biāo)是相對(duì)父視圖的

self.minLay.position=CGPointMake(img.bounds.size.width/2, img.bounds.size.height/2);

//anchorPoint:這個(gè)坐標(biāo)是本View的中心坐標(biāo)复局,anchorPoint跟position是永遠(yuǎn)重合的马篮,所以想要anchorPoint和position相同映之,則需要把a(bǔ)nchorPoint設(shè)置為(0拦焚,0),但該案例需求不同杠输,因?yàn)槲覀兿M衙脶樤O(shè)置到表盤(pán)的中心點(diǎn)赎败,而此時(shí)的anchorPoint還是(0。5蠢甲,0.5)僵刮,這是默認(rèn)的,如果需要設(shè)置成從表盤(pán)中心原點(diǎn)向外延伸的一條直線鹦牛,則需要把a(bǔ)nchorPoint設(shè)置為(0.5搞糕,1),0.5是為了讓該線處于原點(diǎn)中心曼追,而1呢窍仰,是為了讓它與position重合。

self.minLay.anchorPoint=CGPointMake(0.5,1);

self.minLay.backgroundColor= [UIColorblackColor].CGColor;

[img.layeraddSublayer:self.minLay];

//時(shí)針

self.HourLay= [[CALayeralloc]init];

self.HourLay.frame=CGRectMake(0,0,2,60);

self.HourLay.position=CGPointMake(img.bounds.size.width/2, img.bounds.size.height/2);

self.HourLay.anchorPoint=CGPointMake(0.5,1);

self.HourLay.backgroundColor= [UIColorblackColor].CGColor;

[img.layeraddSublayer:self.HourLay];

//秒針

self.secLay= [[CALayeralloc]init];

self.secLay.frame=CGRectMake(0,0,1,80);

self.secLay.position=CGPointMake(img.bounds.size.width/2, img.bounds.size.height/2);

self.secLay.anchorPoint=CGPointMake(0.5,1);

self.secLay.backgroundColor= [UIColorredColor].CGColor;

[img.layeraddSublayer:self.secLay];

//數(shù)字Label

UILabel*timelb = [[UILabelalloc]init];

timelb.frame=CGRectMake(0,120,self.view.bounds.size.width,100);

timelb.font= [UIFontsystemFontOfSize:50];

timelb.textAlignment=NSTextAlignmentCenter;

[self.viewaddSubview:timelb];

__weakViewController*weakSelf =self;

[NSTimerscheduledTimerWithTimeInterval:1repeats:YESblock:^(NSTimer*_Nonnulltimer) {

//獲取當(dāng)前日歷

NSCalendar*cal = [NSCalendarcurrentCalendar];

//根據(jù)需要獲取對(duì)應(yīng)的日歷參數(shù)礼殊,比如時(shí)分秒:NSCalendarUnitHour驹吮、NSCalendarUnitMinute鲫忍、NSCalendarUnitSecond

NSDateComponents*cmp = [calcomponents:NSCalendarUnitSecond|NSCalendarUnitMinute|NSCalendarUnitHourfromDate:[NSDatedate]];

NSIntegersec = cmp.second;

NSIntegermin = cmp.minute;

NSIntegerhour = cmp.hour;

//秒針一分鐘走360度,每一秒是6度钥屈,根據(jù)當(dāng)前秒數(shù)乘以度數(shù)悟民,就是秒針在表盤(pán)上的旋轉(zhuǎn)度數(shù)了,同理分針

CGFloatcurrSec = sec *perSec;

CGFloatcruuMin = min *perMin;

//時(shí)針比較特殊篷就,它的幅度還有分針的幅度有關(guān)射亏,那么需要知道一小時(shí)占六十分鐘的百分比是多少?就是30/60 = 0.5度竭业。舉個(gè)例子:當(dāng)時(shí)間在1小時(shí)45分的時(shí)候智润,如果用hour * perHour,那么得出的時(shí)針只是指到1點(diǎn)而已未辆,而實(shí)際中窟绷,這個(gè)幅度是已經(jīng)快兩點(diǎn)了,那么是不符合要求的咐柜,所以需要知道分針當(dāng)前的時(shí)間乘上0.5度再加上hour * perHour兼蜈,這才是正確的刻度。

CGFloatcurrhour = hour *perHour+ min *0.5;

/*

*CATransform3DMakeRotation(<#CGFloat angle#>, <#CGFloat x#>, <#CGFloat y#>, <#CGFloat z#>)

*在這個(gè)API中拙友,第一個(gè)參數(shù)表示旋轉(zhuǎn)的度數(shù)为狸,而在上面中,我們已經(jīng)知道了時(shí)分秒該旋轉(zhuǎn)多少度遗契,但還不是真正的度數(shù)辐棒,需要進(jìn)行轉(zhuǎn)換

* #define angleToRadious(angle) ((angle)/180.0 * M_PI)通過(guò)這個(gè)宏,轉(zhuǎn)換成度數(shù)

*后面的X,Y,Z的數(shù)值取值都是在[0,1]區(qū)間的牍蜂,在這個(gè)案例中漾根,因?yàn)槲覀兊臅r(shí)分秒針都圍繞Z軸旋轉(zhuǎn)的,所以X,Y取零便可鲫竞。

*/

weakSelf.secLay.transform=CATransform3DMakeRotation(angleToRadious(currSec),0,0,1);

weakSelf.minLay.transform=CATransform3DMakeRotation(angleToRadious(cruuMin),0,0,1);

weakSelf.HourLay.transform=CATransform3DMakeRotation(angleToRadious(currhour),0,0,1);

timelb.text= [NSStringstringWithFormat:@"%zd : %zd : %zd",hour,min,sec];

}];

}

@end


圖一

效果如圖一所示辐怕,直接新建View或者ViewController,代碼原封不動(dòng)搬過(guò)去就可以用了贡茅。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末秘蛇,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子顶考,更是在濱河造成了極大的恐慌赁还,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件驹沿,死亡現(xiàn)場(chǎng)離奇詭異艘策,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)渊季,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)朋蔫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)罚渐,“玉大人,你說(shuō)我怎么就攤上這事驯妄『刹ⅲ” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵青扔,是天一觀的道長(zhǎng)源织。 經(jīng)常有香客問(wèn)我,道長(zhǎng)微猖,這世上最難降的妖魔是什么谈息? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮凛剥,結(jié)果婚禮上侠仇,老公的妹妹穿的比我還像新娘。我一直安慰自己犁珠,他們只是感情好逻炊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著盲憎,像睡著了一般嗅骄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上饼疙,一...
    開(kāi)封第一講書(shū)人閱讀 51,443評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音慕爬,去河邊找鬼窑眯。 笑死,一個(gè)胖子當(dāng)著我的面吹牛医窿,可吹牛的內(nèi)容都是我干的磅甩。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼姥卢,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼卷要!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起独榴,我...
    開(kāi)封第一講書(shū)人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤僧叉,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后棺榔,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體瓶堕,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年症歇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了郎笆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谭梗。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖宛蚓,靈堂內(nèi)的尸體忽然破棺而出激捏,到底是詐尸還是另有隱情,我是刑警寧澤凄吏,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布远舅,位于F島的核電站,受9級(jí)特大地震影響竞思,放射性物質(zhì)發(fā)生泄漏表谊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一盖喷、第九天 我趴在偏房一處隱蔽的房頂上張望爆办。 院中可真熱鬧,春花似錦课梳、人聲如沸距辆。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)跨算。三九已至,卻和暖如春椭懊,著一層夾襖步出監(jiān)牢的瞬間诸蚕,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工氧猬, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留背犯,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓盅抚,卻偏偏與公主長(zhǎng)得像漠魏,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子妄均,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

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