自制圆形时钟⏰

news/2024/7/20 22:20:08 标签: iOS, 钟表, 时钟

如果想着做一个类似的家里的圆形时钟的样式的钟表,可以使用这样的方法:

#import "ViewController.h"

@interface ViewController ()

@property (nonatomic,weak)CALayer *second;

@property (nonatomic ,weak)CALayer *minute;

@property (nonatomic ,weak)CALayer *hour;

@end

@implementation ViewController

- (void)viewDidLoad {

    [super viewDidLoad];

    self.view.backgroundColor = [UIColor cyanColor];

    //创建表盘

    CALayer *clock = [[CALayer alloc]init];

    //大小

    clock.bounds = CGRectMake(0, 0, 200, 200);

    //位置

    clock.position = CGPointMake(200, 200);

    //内容

    clock.contents = (__bridge id _Nullable)([UIImage imageNamed:@"clock"].CGImage);

    [self.view.layer addSublayer:clock];

    //圆角

    clock.cornerRadius = 100;

    //裁剪

    clock.masksToBounds = YES;

    

    //创建秒针

    CALayer *second = [[CALayer alloc]init];

    self.second = second;

    //大小

    second.bounds = CGRectMake(0, 0, 2, 100);

    //位置

    second.position = clock.position;

    //颜色

    second.backgroundColor = [UIColor redColor].CGColor;

    //锚点

    second.anchorPoint = CGPointMake(0.5, 0.8);

    [self.view.layer addSublayer:second];

    

    //创建分针

    CALayer *minute = [[CALayer alloc]init];

    self.minute = minute;

    //大小

    minute.bounds = CGRectMake(0, 0, 3, 80);

    //位置

    minute.position = clock.position;

    //颜色

    minute.backgroundColor = [UIColor blueColor].CGColor;

    //锚点

    minute.anchorPoint = CGPointMake(0.5, 0.8);

    [self.view.layer addSublayer:minute];

    

    //创建时针

    CALayer *hour = [[CALayer alloc]init];

    self.hour = hour;

    //大小

    hour.bounds = CGRectMake(0, 0, 4, 60);

    //位置

    hour.position = clock.position;

    //颜色

    hour.backgroundColor = [UIColor purpleColor].CGColor;

    //锚点

    hour.anchorPoint = CGPointMake(0.5, 0.8);

    [self.view.layer addSublayer:hour];

    

    CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(timeChange)];

    [link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];

    [self timeChange];

}

-(void)timeChange{

    NSDate *date = [NSDate date];

//

//    NSDateFormatter *formatter = [[NSDateFormatter alloc]init];

//    formatter.dateFormat = @"ss";

//    NSString *ms = [formatter stringFromDate:date];

//    CGFloat msValue = [ms floatValue];

    NSCalendar *cal = [NSCalendar currentCalendar];

    CGFloat ms = [cal component:NSCalendarUnitNanosecond fromDate:date];

    CGFloat s= [cal component:NSCalendarUnitSecond fromDate:date];

    CGFloat m = [cal component:NSCalendarUnitMinute fromDate:date];

    CGFloat h = [cal component:NSCalendarUnitHour fromDate:date];

    

    //秒针角度

    CGFloat angle = (2 * M_PI/60) / 1000000000;

    CGFloat angle1 = 2 * M_PI / 60;

    self.second.affineTransform = CGAffineTransformMakeRotation(angle1 * s + angle * ms);

    //分针角度

    CGFloat minuteAngle = 2 * M_PI / 60;

    self.minute.affineTransform = CGAffineTransformMakeRotation(minuteAngle * m + angle1 * s / 60 + angle * ms / 60);

    //时针角度

    CGFloat hourAngle = 2 * M_PI / 12;

    self.hour.affineTransform = CGAffineTransformMakeRotation(hourAngle * h + minuteAngle * m / 12 + angle1 * s / 60 + angle * ms / 60);

    

}

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

@end

当然还要有一个这样的表盘,

其实代码实现主要是用的CALayer的一些动画效果实现的。


http://www.niftyadmin.cn/n/5158375.html

相关文章

手握“发展密钥”,TCL科技或迎价值重估?

在高度竞争且快速变化的泛半导体产业,每一次周期性或结构性的变化,都会对企业经营策略带来深远的影响。 2023年前三季度,泛半导体产业迎来结构性复苏。其中,主流显示领域供需关系趋向健康化,半导体显示行业整体上量价…

北斗卫星高精度定位提高铁路施工精准性

北斗卫星高精度定位提高铁路施工精准性 在现代社会,铁路交通一直是人们出行的重要方式之一,也是国家经济发展的重要支撑。随着科技的不断进步,铁路施工也在不断改进和升级,以适应时代的需求和挑战。而北斗卫星作为我国自主研发的卫…

DVWA靶场SQL注入

本次注入的是DVWA靶场的SQL injection 1.判断是字符型注入还是数字型注入,构造SQL语句 1 and 12 由此可以判断出为字符型注入 2.考虑闭合方式,先随便丢一个单引号试试看看报错提示 You have an error in your SQL syntax; check the manual that cor…

chatgpt相关问题解答

1. openAI的chatgpt的收费方式有哪几种? 根据OpenAI官方的信息,ChatGPT的收费方式包括两种: 1.订阅计划(Subscription Plan):OpenAI提供了ChatGPT Plus订阅计划,每月收费20美元。订阅计划的用…

el-select配合el-tree实现下拉选以及数据回显以及搜索

一、前言 有时候就会遇到组件配合使用的情况&#xff0c;然后就整理了一下&#xff0c;后面大家需要的话可以直接拿去使用。 二、源码 <template><el-selectref"selectTree"filterablev-model"name":placeholder"请选择":filter-meth…

yolov5--ptq--qat量化之敏感层分析

敏感层分析&#xff0c;应该是发生在ptq量化之前进行分析的操作&#xff0c;经过该操作&#xff0c;可得出哪些层不适合进行量化&#xff0c;则在接下来ptq时可以手动关闭这些层的量化。 进入敏感层分析函数sensitive_analysis中&#xff0c; 具体流程为&#xff1a; 首先验证…

2024年天津财经大学珠江学院专升本预计新增金融学招生专业

2024年天津高职升本科天津财经大学珠江学院预计在今年新增招生专业&#xff0c;专业为金融学&#xff0c;目前该专业正在向天津市教育委员会申报中&#xff0c;预计最快下周即可在天津财经大学珠江学院招生官方发出通知。具体以官方审批是否通过为准。 珠江消息详情如下&#x…

企业级私有化部署数字办公工具集合,解决企业全方位需求,快收藏

随着信息技术的日新月异&#xff0c;企业对IT建设的依赖程度越来越高。为了满足这一需求&#xff0c;软开企服凭借积累了多年的项目经验&#xff0c;推出了一款名为JVS的私有化部署企业信息化底座。JVS涵盖了多个产品领域&#xff0c;如协同办公、低代码开发、数据分析、风控决…