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—时钟相关推荐

  1. 集成 jpush-react-native 常见问题汇总 ( iOS 篇)

    给 iOS 应用添加推送功能是一件比较麻烦的事情,本篇文章收集了集成 jpush-react-native 的常见问题,目的是为了帮助用户更好地排查问题 1.收不到推送 确保是在真机上测试,而不是在模 ...

  2. iOS面试准备 - ios篇

    iOS面试准备 - ios篇 ios面试准备 - objective-c篇 ios面试准备 - 网络篇 IOS面试准备 - C++篇 iOS面试准备 - 其他篇 运行时 https://juejin. ...

  3. cocos creator接入微信登陆sdk ios篇

    cocos creator接入微信登陆sdk ios篇 背景已经在Android篇里面交代过了,有兴趣的朋友可以再看看Android篇 步骤 去微信开放平台下载ios平台所需要的sdk 在" ...

  4. APP逆向分析之钉钉抢红包插件的实现-iOS篇

    花费了很多天的原创文章,转载请注明出处https://yohunl.com/ding-ding-qiang-hong-bao-cha-jian-iospian/ ,谢谢! 网络上关于微信红包的分析文章 ...

  5. 【STM32】STM32标准库与HAL库对照学习教程特别篇--系统时钟RCC详讲

    [STM32]STM32标准库与HAL库对照学习教程特别篇--系统时钟RCC详讲 一.前言 二.时钟是什么 三.时钟树 1.时钟树图 2.时钟树讲解 左边部分 中间部分 右边部分 特殊部分 四.初始化 ...

  6. GJM:移动App入侵与逆向破解技术-iOS篇 【转载】

    GJM:移动App入侵与逆向破解技术-iOS篇 [转载] 转载: URL http://dev.qq.com/topic/577e0acc896e9ebb6865f321 如果您有耐心看完这篇文章,您 ...

  7. 高德APP启动耗时剖析与优化实践(iOS篇)

    来自:高德技术 前言 最近高德地图APP完成了一次启动优化专项,超预期将双端启动的耗时都降低了65%以上,iOS在iPhone7上速度达到了400毫秒以内.就像产品们用后说的,快到不习惯.算一下每天为 ...

  8. 梳理19年上半年图文记录笔记(ios篇)

    这篇笔记,是自己学习的学习大杂烩,主要用于记录,方便自己查找,其中有些,现在自己看起来都有点好笑,因为错的太低级了,不过这也是成长,后面会梳理好的 一.极客和我赢职场普及的一些基础概念 ##1.环境搭 ...

  9. Unity3d 接入VKSDK登陆和分享 IOS篇

    这几天公司要求接VK的登陆和分享,结果上网一查关于IOS的接入一篇都没有?! 官方文档和最新sdk很多不一样写的也很不详细基本没啥用,爬了一天坑终于搞定了记录下来. 官方文档地址:https://vk ...

最新文章

  1. ORACLE学习第三天
  2. The DVMM Lab at Columbia University
  3. C语言标量变向量的函数,GLSL 详解(基础篇)
  4. mysql修改主机名_Ubuntu修改主机名
  5. boost::multiprecision模块hash相关的测试程序
  6. jQuery 向div中追加内容
  7. mysql 数据入库去重_MySQL中去重 distinct 的用法 ,数据库去重distinct
  8. 合宙Luat | 嘿~合宙刚办了一场「大型网友见面会」
  9. 三线压力传感器原理_压力传感器 压力传感器原理
  10. 能不能打开编辑器直接跳转到拼图功能
  11. 结构图(耦合、内聚)
  12. 查询水果价格(15 分)
  13. uni-app小程序绘制海报
  14. mysql--部门表员工表练习题
  15. 《宝宝出生特别纪念日》
  16. 农夫 狼 羊 白菜 java,农夫、狼、羊、白菜(回溯法求解)
  17. 单点登录的简单理解(SSO)
  18. 【观察】谁是中国容器软件市场TOP厂商?权威研究机构IDC发布最新报告
  19. jetbrains rider 一直显示 syncing project templates
  20. 【解决】应用程序无法正常启动(0xc000007b)。请单击“确定”关闭应用程序。

热门文章

  1. 用css,html,js搭建一个书店购物系统
  2. ctfshow摆烂杯
  3. vue3使用screenfull实现全屏
  4. 2021.03青少年软件编程(Python)等级考试试卷(二级)
  5. 唯智信息WMS:让制造业仓库管理更智能
  6. OPM Demo Flow
  7. Hive DDL操作命令实验
  8. 【译】AN1297:使用Silicon Labs蓝牙协议栈的定制测向解决方案
  9. 6.2 基础有大用——《逆袭大学》连载
  10. unity跑酷怎么添加金币_叫好不叫买?《跑酷老奶奶》游戏评测