iOS篇—Demo5—时钟
Demo5—时钟
1.使用图层设置背景图片
self.view.layer.contents = (__bridge id _Nullable)([UIImage imageNamed:@"time"].CGImage);
2.创建一个图层用来显示时钟图片,并设置相应的属性
//创建一个图层用来显示一张图片
CALayer *wheelLayer = [CALayer layer];//设置显示的位置position
wheelLayer.position = CGPointMake(180, 250);//设置图层的宽 高 bounds属性
wheelLayer.bounds = CGRectMake(0, 0, 296, 296);//设置锚点:图层的哪个位置和position重合
wheelLayer.anchorPoint = CGPointMake(0.5, 0.5);//设置图层的内容 即图片
wheelLayer.contents = (__bridge id _Nullable)([UIImage imageNamed:@"Clock"].CGImage);//图层没法接收事件 要添加图层必须依赖某个视图 所以需要将图层添加到某个视图上图层上
[self.view.layer addSublayer:wheelLayer];
3.创建一个点图层
//创建一个圆点图层
CALayer *redPointLayer = [CALayer layer];//让红点和表环的中心点重合
redPointLayer.position = wheelLayer.position;//设置圆点的尺寸
redPointLayer.bounds = CGRectMake(0, 0, 15, 15);//设置圆角半径
redPointLayer.cornerRadius = 7.5;//设置圆点颜色
redPointLayer.backgroundColor = [UIColor redColor].CGColor;
4.创建指针,并设置相应属性
- 创建时针
//创建时针
self.hourLayer = [CALayer layer];
//位置
_hourLayer.position = wheelLayer.position;
//设置锚点
_hourLayer.anchorPoint = CGPointMake(0.5, 0.7);
//尺寸
_hourLayer.bounds = CGRectMake(0, 0, 8, 80);
//颜色
_hourLayer.backgroundColor = [UIColor blackColor].CGColor;
//显示
[self.view.layer addSublayer:_hourLayer];
- 创建分针
//创建分针
self.miniuteLayer = [CALayer layer];
//位置
_miniuteLayer.position = wheelLayer.position;
//设置锚点
_miniuteLayer.anchorPoint = CGPointMake(0.5, 0.7);
//尺寸
_miniuteLayer.bounds = CGRectMake(0, 0, 6, 100);
//颜色
_miniuteLayer.backgroundColor = [UIColor redColor].CGColor;
//显示
[self.view.layer addSublayer:_miniuteLayer];
- 创建秒针
//创建秒针
self.secondLayer = [CALayer layer];
//位置
_secondLayer.position = wheelLayer.position;
//设置锚点
_secondLayer.anchorPoint = CGPointMake(0.5, 0.7);
//尺寸
_secondLayer.bounds = CGRectMake(0, 0, 4, 120);
//颜色
_secondLayer.backgroundColor = [UIColor greenColor].CGColor;
//显示
[self.view.layer addSublayer:_secondLayer];
5.写一个方法,让指针对应当前的具体时间
- (void)changeTime{//1.获取当前的时间,时间的类:NSDate,二进制:NSDataNSDate *nowTime = [NSDate date];//提取时间,NSDateFormatter类:管理读取时间的格式NSDateFormatter *formatter = [[NSDateFormatter alloc] init];//设置提取的格式formatter.dateFormat = @"K:m:s";//从当前时间中提取时分秒NSString *timeStr = [formatter stringFromDate:nowTime];NSLog(@"%@", timeStr);//将字符串分割NSArray *timeArray = [timeStr componentsSeparatedByString:@":"];NSLog(@"%@", timeArray);//将数组中的字符串转换成整型int hour = [[timeArray objectAtIndex:0] intValue];int minute = [[timeArray objectAtIndex:1] intValue];int second = [[timeArray objectAtIndex:2] intValue];NSLog(@"%d %d %d", hour, minute, second);//旋转时分秒针_hourLayer.transform = CATransform3DRotate(self.hourLayer.transform, M_PI/6*(hour+minute/60), 0, 0, 1);_miniuteLayer.transform = CATransform3DRotate(self.miniuteLayer.transform, M_PI/30*(minute+second/60), 0, 0, 1);_secondLayer.transform = CATransform3DRotate(self.secondLayer.transform, M_PI/30.0*second, 0, 0, 1);
}
6.开启一个定时器,使程序运行起来,时钟开始走
- (void)viewDidAppear:(BOOL)animated{[super viewDidAppear:animated];//开启定时器,让时钟走起来//1.CADisplayLink - 对UIView进行动画 无法完成只运行某个时间段的设置//2.NSTime - 数据的处理 如果视图中有滚动视图 在执行滚动事件的时候定时器无效了CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(rotate)];//默认情况下通过屏幕刷新pinlv来执行任务 60HZ:1s刷新屏幕60次link.preferredFramesPerSecond = 1;//必须将这个对象放到NSRunLoop中才能被执行[link addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
}
7.写一个方法,实现让时分秒指针转起来的操作
- (void)rotate{_secondLayer.transform = CATransform3DRotate(_secondLayer.transform, M_PI*2/60.0, 0, 0, 1);_miniuteLayer.transform = CATransform3DRotate(_miniuteLayer.transform, M_PI*2/60.0/60.0, 0, 0, 1);_hourLayer.transform = CATransform3DRotate(_hourLayer.transform, M_PI*2/60.0/60.0/12.0, 0, 0, 1);
}
8.添加"嘀嗒"的钟表声
- 先导入头文件
#import <AudioToolbox/AudioToolbox.h>
- 实现方法
- (void)playMusic{//1.获取音频文件路径NSString *filePath = [[NSBundle mainBundle] pathForResource:@"dida.m4a" ofType:nil];//2.将字符串的路径转化为NSURL类型NSURL *url = [NSURL fileURLWithPath:filePath];//3.为这个url对应的音频,创建一个系统IDSystemSoundID soundID;AudioServicesCreateSystemSoundID((__bridge CFURLRef _Nonnull)(url), &soundID);//4.播放音频AudioServicesPlaySystemSound(soundID);
}
iOS篇—Demo5—时钟相关推荐
- 集成 jpush-react-native 常见问题汇总 ( iOS 篇)
给 iOS 应用添加推送功能是一件比较麻烦的事情,本篇文章收集了集成 jpush-react-native 的常见问题,目的是为了帮助用户更好地排查问题 1.收不到推送 确保是在真机上测试,而不是在模 ...
- iOS面试准备 - ios篇
iOS面试准备 - ios篇 ios面试准备 - objective-c篇 ios面试准备 - 网络篇 IOS面试准备 - C++篇 iOS面试准备 - 其他篇 运行时 https://juejin. ...
- cocos creator接入微信登陆sdk ios篇
cocos creator接入微信登陆sdk ios篇 背景已经在Android篇里面交代过了,有兴趣的朋友可以再看看Android篇 步骤 去微信开放平台下载ios平台所需要的sdk 在" ...
- APP逆向分析之钉钉抢红包插件的实现-iOS篇
花费了很多天的原创文章,转载请注明出处https://yohunl.com/ding-ding-qiang-hong-bao-cha-jian-iospian/ ,谢谢! 网络上关于微信红包的分析文章 ...
- 【STM32】STM32标准库与HAL库对照学习教程特别篇--系统时钟RCC详讲
[STM32]STM32标准库与HAL库对照学习教程特别篇--系统时钟RCC详讲 一.前言 二.时钟是什么 三.时钟树 1.时钟树图 2.时钟树讲解 左边部分 中间部分 右边部分 特殊部分 四.初始化 ...
- GJM:移动App入侵与逆向破解技术-iOS篇 【转载】
GJM:移动App入侵与逆向破解技术-iOS篇 [转载] 转载: URL http://dev.qq.com/topic/577e0acc896e9ebb6865f321 如果您有耐心看完这篇文章,您 ...
- 高德APP启动耗时剖析与优化实践(iOS篇)
来自:高德技术 前言 最近高德地图APP完成了一次启动优化专项,超预期将双端启动的耗时都降低了65%以上,iOS在iPhone7上速度达到了400毫秒以内.就像产品们用后说的,快到不习惯.算一下每天为 ...
- 梳理19年上半年图文记录笔记(ios篇)
这篇笔记,是自己学习的学习大杂烩,主要用于记录,方便自己查找,其中有些,现在自己看起来都有点好笑,因为错的太低级了,不过这也是成长,后面会梳理好的 一.极客和我赢职场普及的一些基础概念 ##1.环境搭 ...
- Unity3d 接入VKSDK登陆和分享 IOS篇
这几天公司要求接VK的登陆和分享,结果上网一查关于IOS的接入一篇都没有?! 官方文档和最新sdk很多不一样写的也很不详细基本没啥用,爬了一天坑终于搞定了记录下来. 官方文档地址:https://vk ...
最新文章
- ORACLE学习第三天
- The DVMM Lab at Columbia University
- C语言标量变向量的函数,GLSL 详解(基础篇)
- mysql修改主机名_Ubuntu修改主机名
- boost::multiprecision模块hash相关的测试程序
- jQuery 向div中追加内容
- mysql 数据入库去重_MySQL中去重 distinct 的用法 ,数据库去重distinct
- 合宙Luat | 嘿~合宙刚办了一场「大型网友见面会」
- 三线压力传感器原理_压力传感器 压力传感器原理
- 能不能打开编辑器直接跳转到拼图功能
- 结构图(耦合、内聚)
- 查询水果价格(15 分)
- uni-app小程序绘制海报
- mysql--部门表员工表练习题
- 《宝宝出生特别纪念日》
- 农夫 狼 羊 白菜 java,农夫、狼、羊、白菜(回溯法求解)
- 单点登录的简单理解(SSO)
- 【观察】谁是中国容器软件市场TOP厂商?权威研究机构IDC发布最新报告
- jetbrains rider 一直显示 syncing project templates
- 【解决】应用程序无法正常启动(0xc000007b)。请单击“确定”关闭应用程序。