第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

iOS動(dòng)畫系列之二:帶時(shí)分秒指針的時(shí)鐘動(dòng)畫(下)

標(biāo)簽:
iOS

1. 创建CALayer

  • position:默认情况下相当于UIView的center

  • contents:CALayer的内容。可以设置为图片,但是需要桥接。桥接不需要自己额外设置,编译后编译器会自动提示,让Xcode自动帮我们桥接就可以啦。

  • 就像添加子视图一样,别忘了把自己创建的Layer添加到view.layer上面。

- (void)viewDidLoad {
    [super viewDidLoad];    
    CALayer *dialLayer= [[CALayer alloc] init];
    dialLayer.bounds = CGRectMake(0, 0, 150, 150);
    
    dialLayer.position = self.view.center;
    
    dialLayer.contents = (__bridge id _Nullable)([UIImage imageNamed:@"clock"].CGImage);
    
    [self.view.layer addSublayer:dialLayer];
}

2. 设置时分秒针

以秒针为例。时针、分针都是一样的。

//    设置秒针
    UIView *secondHandView = [[UIView alloc]init];
    secondHandView.backgroundColor = [UIColor redColor];
    secondHandView.bounds = CGRectMake(0, 0, 1, 60);
    secondHandView.center = self.view.center;    
    
//    修改锚点
    secondHandView.layer.anchorPoint = CGPointMake(0.5, 1);
    [self.view addSubview:secondHandView];    self.secondHandView = secondHandView;

锚点是个神马东东?

锚点是神马吶?打个比方,我们耍双截棍的时候,双截棍其实都是围绕咱们握拳的地方转来转去的,其实就是双截棍的锚点。

再打个比方,我们在一张A4纸上面钉一个。然后旋转A4纸,那颗图钉的位置就是A4纸的锚点。

所以锚点肯定是个坐标点喽~有X、Y组成。锚点的数值范围就是0~1。0表示在最左边或者最上边,1表示在最右边或者最下边。有点模糊是不?再来张图就更清楚了:

锚点示意图1.png

锚点示意图2.png

咱们刚才绘制的秒针实际就是一个宽1,长60的一个View。咱们要让它旋转起来的时候围绕着一个点转,就要把那个点用图钉钉上。这个图钉的位置就是锚点,就是我们在代码中设置的(0.5,1).

3.  创建CADisplayLink

我们一开始想到的办法就是用定时器,每一秒钟刷新一次秒针。但是使用了定时器之后,有一个问题。发现秒针比电脑上的稍微慢一点。是因为刷新频率和电脑不一样。

  • 解决方法就是使用CADisplayLink来刷新时钟。

//    创建CADisplayLink
    CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(clockRunning)];//    将创建的CADisplayLink加入到主线程中
    [link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];

3.1 CADisplayLink和NSTimer的区别

  • NSTimer占用系统资源较多

  • NSTimer使用完后,一定要销毁,把它设置成nil。

  • CADisplayLink本来就在进程中,每秒进行60次。

  • 核心动画的时候,最好使用CADisplayLink

3.2 获取时间及时区

  • clockRunning这个方法中,我们要设置时区,获取日历、当前时间。

在和时间打交道的时候,请千万别忘记了时区。全球有那么多国家,不要只想着自己哈。

//获取本地时区
    NSTimeZone *tZone = [NSTimeZone localTimeZone];//    获取日历
    NSCalendar *calendar = [NSCalendar currentCalendar];    
//获取系统当前时间    
    NSDate *currentDate = [NSDate date]; //设置日历的时区   
    [calendar setTimeZone:tZone];//取出当前的时分秒
    NSDateComponents *currentTime = [calendar components:NSCalendarUnitSecond|NSCalendarUnitMinute|NSCalendarUnitHour|NSCalendarUnitTimeZone fromDate:currentDate];

3.3 根据当前时间计算时分秒针弧度

根据当前时间计算时分秒针弧度,然后让自己设置的View进行形变。

因为咱们这个方法是通过CADisplayLink来调用的,也就是说一分钟会被调用60次。因此每秒咱们的秒针都会旋转一次。

    CGFloat angle = (M_PI * 2 / 60) * currentTime.second;    
    self.secondHandView.transform = CGAffineTransformMakeRotation(angle);    
    CGFloat minuteAngle = (M_PI * 2 / 60) * currentTime.minute;    self.minuteHandView.transform = CGAffineTransformMakeRotation(minuteAngle);    
    CGFloat hourAngle = (M_PI * 2 / 12) * currentTime.hour;    self.hourHandView.transform = CGAffineTransformMakeRotation(hourAngle);

4. 成稿

完成效果:

Paste_Image.png

OC和Swift的下载地址如下:
https://git.oschina.net/atypical/clock.git

iOS实践:带时分秒指针的时钟动画(OC和Swift两版)



作者:非典型技术宅
链接:https://www.jianshu.com/p/3a96cc95da5c

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消