美文网首页
2018-02-07

2018-02-07

作者: 谭先生家的称呼 | 来源:发表于2018-02-07 16:28 被阅读9次

CALayer实例之时钟

#import "ViewController.h"

#define angle2radian(x) ((x)/ 180.0 * M_PI) //2角弧度

#define TLSecondAngle (2 * M_PI / 60)  // 秒针每一秒走6度

#define TLMinusAngle  (2 * M_PI / 3600) // 分针每一秒走的度数

#define TLHourAngle  (2 * M_PI / (3600 * 120)) // 时针每一秒走的度数

// 每小时时钟转多少度

#define TLPerHourA 30

@interface ViewController ()

@property(nonatomic,weak) CALayer* secondLayer;

@property(nonatomic,weak) CALayer* minusLayer;

@property(nonatomic,weak) CALayer* hourLayer;

@property(nonatomic,weak) CALayer* clockLayer;

@end

@implementation ViewController

/**

懒加载时钟图层

*/

- (CALayer *)clockLayer

{

    if (_clockLayer == nil)

    {

        CGFloat width = 200.0f;

        CALayer *clockLayer = [CALayer layer];

        clockLayer.position = self.view.center;

        clockLayer.backgroundColor = [UIColor whiteColor].CGColor;

        clockLayer.bounds = CGRectMake(0, 0, width, width);

        clockLayer.contents = (id)([UIImage imageNamed:@"钟表"].CGImage);

        [self.view.layer addSublayer:clockLayer];

        self.clockLayer = clockLayer;

    }

    return _clockLayer;

}

- (void)viewDidLoad {

    [super viewDidLoad];

    self.title = @"首页";

    NSDate* date = [NSDate date];

    NSCalendar* calendar = [NSCalendar currentCalendar];

    NSDateComponents* components = [calendar components:NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond fromDate:date];

    NSInteger second = components.second;

    NSInteger minus = components.minute;

    NSInteger hour = components.hour;

    CGFloat width = self.clockLayer.bounds.size.width;

    // 秒针

    self.secondLayer = [self layerWithPosition:CGPointMake(width * 0.5, width * 0.5) bounds:CGRectMake(0, 0, 3, 80) backgroundColor:[UIColor redColor]];

    //分针

    self.minusLayer = [self layerWithPosition:CGPointMake(width * 0.5, width * 0.5) bounds:CGRectMake(0, 0, 3, 70) backgroundColor:[UIColor blueColor]];

    //时针

    self.hourLayer = [self layerWithPosition:CGPointMake(width * 0.5, width * 0.5) bounds:CGRectMake(0, 0, 3, 50) backgroundColor:[UIColor blackColor]];

    // 根据当前时间旋转图层的角度

    self.secondLayer.transform = CATransform3DMakeRotation(TLSecondAngle * second, 0, 0, 1);

    self.minusLayer.transform = CATransform3DMakeRotation(TLSecondAngle * minus, 0, 0, 1);

    self.hourLayer.transform  = CATransform3DMakeRotation(angle2radian(TLPerHourA * (minus / 60.0 + hour)), 0, 0, 1);

    [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateTime) userInfo:nil repeats:YES];

}

/**

*  创建一个图层对象

*

*  @param position        图层位置

*  @param bounds          图层大小

*  @param backgroundColor  图层颜色

*

*  @rerurn 创建好的图层

*/

- (CALayer *)layerWithPosition:(CGPoint)position bounds:(CGRect)bounds backgroundColor:(UIColor *)backgroundColor

{

    CALayer* layer = [CALayer layer];

    layer.position = position;

    layer.anchorPoint = CGPointMake(0.5, 1);

    layer.bounds = bounds;

    layer.backgroundColor = backgroundColor.CGColor;

    [self.clockLayer addSublayer:layer];

    return layer;

}

/**

*  每一秒更新一次时间

*/

- (void)updateTime

{

    self.secondLayer.transform = CATransform3DRotate(self.secondLayer.transform, TLSecondAngle, 0, 0, 1);

    self.minusLayer.transform = CATransform3DRotate(self.minusLayer.transform, TLMinusAngle, 0, 0, 1);

    self.hourLayer.transform = CATransform3DRotate(self.hourLayer.transform, TLHourAngle, 0, 0, 1);

}

@end

相关文章

  • 2018-02-07-00714班作业汇总

    1、2018-02-07演讲战队作业雨汇总 2、2018-02-07投资组作业雨汇总 3、2018-02-07英语...

  • es6-Symbol

    title: es6-Symboldate: 2018-02-07 22:40:00tags: es6 前言 突然...

  • 每日确定

    New logo 创作你的创作 免费下载 2018-02-07 180 孙仕霞 简书作者 2018.02.06 0...

  • 险峰

    2018-02-07 ——岁月如歌诗词选(第二集.37) 覌微信《毕福剑之后,赵...

  • 145|怎样战胜“女孩没有男孩聪明”的偏见?

    145|怎样战胜“女孩没有男孩聪明”的偏见? Dr. 魏 2018-02-07 145|怎样战胜“女孩没有男孩聪明...

  • 寒假见闻

    寒假见闻 2018-02-07 作者:柠檬的味道像雨天 977685人读过 寒假里,发生过许多愉快的事...

  • 2018-02-07

    禾隆李亮 2018-02-07 21:23 · 字数 270 · 阅读 3 · 日记本 【日精进打卡第34天】 宁...

  • 一朵敢于争先的小花

    古树望月 2018-02-07 03:45 · 字数 471 · 阅读 1 · 日记本 春天和夏天不同,春天里大...

  • 基金定投

    关于基金定投 木沁原 2018-02-07 14:53 · 字数 392 · 阅读 1 · 日记本 基金定投:定期...

  • 一篇气死99个老师的中学生作文

    一篇气死99个老师的中学生作文 2018-02-07 作者:柠檬的味道像雨天 85567人读过 ...

网友评论

      本文标题:2018-02-07

      本文链接:https://www.haomeiwen.com/subject/cpkazxtx.html