iOS 之UI進階-CALayer創建時鐘

iOS開發2019-07-12 07:40:17

黑客技術
點擊右側關注,瞭解黑客的世界!

Java開發進階
點擊右側關注,掌握進階之路!

Linux編程
點擊右側關注,免費入門到精通!



CALayerUIView的區別


舉個🌰


在一個白色的view上添加一個紅色的layer和一個紅色的view的區別是什麼?


在一個白色的view上添加一個紅色的layer就是一張白色的紙上有一塊區域被塗成了紅色


在一個白色的view上添加一個紅色的view就是一張白色的紙上又放了一張紅色的紙


事實上,view之所以能夠顯示在屏幕上完全是因為它內部的一個圖層。
換句話説view不具備顯示功能,它只是為了處理和響應事件,layer才具備顯示功能


首先創建錶盤


 //創建一個錶盤
CALayer* clock = [[CALayer alloc]init];
clock.bounds = CGRectMake(0, 0, 200, 200);
clock.position = CGPointMake(200, 200);
clock.contents = (__bridge id)[UIImage imageNamed:@"clock"].CGImage;
clock.cornerRadius = 100;
clock.masksToBounds = YES;

創建秒針之前先來説一説CALayer錨點問題


錨點的類型是CGPoint類型,默認值是(0.5~0.5)即中心點,取值範圍都是(0~1),也就是説通過(0~1)的取值我們可以定位到layer上的任意一個點上。


而你所設置的錨點的位置就是position所設置的位置,通過調整錨點的位置我們可以對layer進行微調。


具體可以看下圖



創建秒針

  
  //創建秒針
CALayer* second = [[CALayer alloc]init];
second.bounds = CGRectMake(0, 0, 2, 100);
second.position = clock.position;
second.backgroundColor = UIColor.redColor.CGColor;
//錨點(定位點)取值範圍是(0~1)
second.anchorPoint = CGPointMake(0.5, 0.7);


時鐘刷新


CADisplayLink是一種以屏幕刷新頻率為觸發的時鐘機制,每秒大概刷新60次,一般的動畫效果都會採用CADisplayLink作為定時器,這樣動畫看上去才更加流暢。


創建計時器


CADisplayLink* link = [CADisplayLink displayLinkWithTarget:self selector:@selector(timeChanged)];
[link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];


刷新方法


-(void)timeChanged{
//計算一秒鐘旋轉的角度
CGFloat angle = 2 * M_PI / 60;

NSDate* date = [NSDate date];
NSCalendar* calendar = [NSCalendar currentCalendar];
CGFloat time = [calendar component:NSCalendarUnitSecond fromDate:date];
self.second.affineTransform = CGAffineTransformMakeRotation(time*angle);
}


CGAffineTransformMakeCGAffineTransform的區別


用旋轉舉例説明


CGAffineTransformMakeRotation(angle) //在最開始的位置上進行旋轉
CGAffineTransformRotate(self.second.affineTransform, angle);//在原來的基礎上旋轉


 推薦↓↓↓ 

👉16個技術公眾號】都在這裏!

涵蓋:程序員大咖、源碼共讀、程序員共讀、數據結構與算法、黑客技術和網絡安全、大數據科技、編程前端、Java、Python、Web編程開發、Android、iOS開發、Linux、數據庫研發、幽默程序員等。

萬水千山總是情,點個 “在看” 行不行
https://hk.wxwenku.com/d/201135935