自制圆形时钟⏰

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

#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 当然还要有一个这样的表盘,** ![](https://file.jishuzhan.net/article/1721764295437455362/b44ce457bb5194d593c49f2c48cd168a.webp) 其实代码实现主要是用的CALayer的一些动画效果实现的。

相关推荐
若水无华6 小时前
fiddler 配置ios手机代理调试
ios·智能手机·fiddler
Aress"7 小时前
【ios越狱包安装失败?uniapp导出ipa文件如何安装到苹果手机】苹果IOS直接安装IPA文件
ios·uni-app·ipa安装
Jouzzy17 小时前
【iOS安全】Dopamine越狱 iPhone X iOS 16.6 (20G75) | 解决Jailbreak failed with error
安全·ios·iphone
瓜子三百克17 小时前
采用sherpa-onnx 实现 ios语音唤起的调研
macos·ios·cocoa
左钦杨18 小时前
IOS CSS3 right transformX 动画卡顿 回弹
前端·ios·css3
努力成为包租婆19 小时前
SDK does not contain ‘libarclite‘ at the path
ios
安和昂2 天前
【iOS】Tagged Pointer
macos·ios·cocoa
I烟雨云渊T2 天前
iOS 阅后即焚功能的实现
macos·ios·cocoa
struggle20252 天前
适用于 iOS 的 开源Ultralytics YOLO:应用程序和 Swift 软件包,用于在您自己的 iOS 应用程序中运行 YOLO
yolo·ios·开源·app·swift
Unlimitedz2 天前
iOS视频编码详细步骤(视频编码器,基于 VideoToolbox,支持硬件编码 H264/H265)
ios·音视频