效果图


实现思路


  • 该示例通过隐式动画实现
  • 表盘通过显示在imageView中的一张图片来实现
  • 在表盘上绘制(时分秒)三条直线,分别位于不同的图层,且时针位于最下层,秒针位于最上层

    • 设置直线为圆角
    • 直线的一段位于表盘的圆心
    • 通过NSTimer定时器,使不同的图层定时执行对应的动画

实现步骤


  • 通过storyboard创建表盘,并拥有它

    @property (weak, nonatomic) IBOutlet UIImageView *clockView;
  • 使用三个成员变量来保存时分秒三根表针位于的不同图层

    @property (nonatomic, weak) CALayer *secondLayer;
    @property (nonatomic, weak) CALayer *minuteLayer; @property (nonatomic, weak) CALayer *hourLayer;
  • 初始化所用到的常量

    //将旋转角度转换为弧度制
    #define angleToRadion(angle) ((angle) / 180.0 * M_PI)//秒针每秒钟转过的角度
    #define perSecondAngle 6 //分针每分钟转过的角度 #define perMinuteAngle 6 //时针每小时转过的角度 #define perHourAngle 30 //时针每分钟转过的角度 #define perMuniteHourAngle 0.5
  • 设置时分秒三根表针

    • 设置时针

      - (void)setUpHourLayer
      {//创建图层CALayer *layer = [CALayer layer];layer.backgroundColor = [UIColor blackColor].CGColor; layer.cornerRadius = 8; 设置图层的锚点 layer.anchorPoint = CGPointMake(0.5, 1); //设置图层的位置和尺寸 layer.position = CGPointMake(kClockWith * 0.5, kClockWith * 0.5); layer.bounds = CGRectMake(0, 0, 5, kClockWith * 0.5 - 44); //将图层添加到父图层中 [self.clockView.layer addSublayer:layer]; self.hourLayer = layer; }
    • 设置分针

      - (void)setUpMinuteLayer
      {CALayer *layer = [CALayer layer];layer.backgroundColor = [UIColor blackColor].CGColor; layer.cornerRadius = 4; //设置锚点 layer.anchorPoint = CGPointMake(0.5, 1); //设置位置和尺寸 layer.position = CGPointMake(kClockWith * 0.5, kClockWith * 0.5); layer.bounds = CGRectMake(0, 0, 3, kClockWith * 0.5 - 34); //将图层添加到父图层中 [self.clockView.layer addSublayer:layer]; self.minuteLayer = layer; }
    • 设置秒针

      - (void)setUpSecondLayer
      {CALayer *layer = [CALayer layer];layer.backgroundColor = [UIColor redColor].CGColor; //设置锚点 layer.anchorPoint = CGPointMake(0.5, 1); //设置位置和尺寸 layer.position = CGPointMake(kClockWith * 0.5, kClockWith * 0.5); layer.bounds = CGRectMake(0, 0, 1, kClockWith * 0.5 - 24); //将图层添加到父图层中 [self.clockView.layer addSublayer:layer]; self.secondLayer = layer; }
  • 设置定时器,定时执行动画

    [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timeChange) userInfo:nil repeats:YES];
  • 设置定时器触发时调用的方式,添加动画代码

    - (void)timeChange
    {//获取日历对象NSCalendar *calendar = [NSCalendar currentCalendar];//获取日期组件 NSDateComponents *components = [calendar components:NSCalendarUnitSecond | NSCalendarUnitMinute | NSCalendarUnitHour fromDate:[NSDate date]]; //获取当前的时分秒值 NSInteger second = components.second; NSInteger munite = components.minute; NSInteger hour = components.hour; //计算当前时分秒表针转过的角度(弧度制) CGFloat secondAngle = angleToRadion(second * perSecondAngle); CGFloat muniteAngle = angleToRadion(munite * perMinuteAngle); CGFloat hourAngle = angleToRadion(hour *perHourAngle + munite * perMuniteHourAngle); //修改时分秒表针位于的图层的transform属性,执行隐式动画 self.secondLayer.transform = CATransform3DMakeRotation(secondAngle, 0, 0, 1); self.minuteLayer.transform = CATransform3DMakeRotation(muniteAngle, 0, 0, 1); self.hourLayer.transform = CATransform3DMakeRotation(hourAngle, 0, 0, 1); }

转载于:https://www.cnblogs.com/yxt9322yxt/p/4782840.html

CAnimation-模拟时钟相关推荐

  1. java 模拟时钟_java模拟时钟

    本次课程设计采用时间片轮转调度算法来实现模拟进程调度任务的执行过 程. 用 Java 模拟进程调度过程,可以方便地将运行结果直观地表示出来.Java 语言 独有的多...... 本次课程设计采用时间片 ...

  2. c语言画图 钟表模拟程序,图形模拟时钟C语言课程设计

    图形模拟时钟C语言课程设计 更新时间:2017/2/2 9:03:00  浏览量:640  手机版 学号13082101182014-2015学年第二学期 <高级语言程序设计> 课程设计报 ...

  3. c语言课设报告时钟vc环境,C语言课程设计报告模拟时钟转动程序

    C语言课程设计报告模拟时钟转动程序 课程设计报告题 目 课 程 名 称 结构化程序设计课程设计 院 部 名 称 专 业 班 级 学 生 姓 名 王蕾 学 号 课程设计地点 课程设计学时 指 导 教 师 ...

  4. c语言课设报告时钟vc环境,C语言课程设计报告模拟时钟转动程序.doc

    C语言课程设计报告模拟时钟转动程序 PAGE 课程设计报告 题 目 课 程 名 称 结构化程序设计课程设计 院 部 名 称 专 业 班 级 学 生 姓 名 王蕾 学 号 课程设计地点 课程设计学时 指 ...

  5. 模拟时钟在LCD上的显示

    我很早就想做一个模拟时钟了,网上也有很多C语言写的模拟时钟的代码,不过是基于TC的.后来我找到一个使用easy X lib写的模拟时钟,于是就将它移植到我的开发板屏幕上.前面已经完成了LCD的画点.画 ...

  6. 51单片机 外部时钟_基于51单片机的LCD12864显示模拟时钟

    今天要分享的仿真和程序是基于51单片机的LCD12864显示模拟时钟.公众号之前也分享过数字时钟,但是那些时钟都是采用数字显示的形式来显示时间,而今天分享一个采用LCD12864显示的模拟指针式时钟. ...

  7. java模拟时钟课程设计_java课程设计-时钟图形模拟

    java课程设计-时钟图形模拟 计算机与信息工程系 <高级语言程序设计>课程设计报告课 程 设 计 任 务 书专 业 通信工程 班 级 13 级四班 姓 名 张凯铭设 计 起 止 日 期设 ...

  8. 模拟时钟:时钟根据时间转动

    /**** 时钟根据时间转动* 模拟时钟**/ @RemoteView public class AnalogClock extends View {private Time mCalendar;pr ...

  9. HTML简易时钟教程,html5 svg简单的模拟时钟特效-HTML5动画

    这是一款代码非常简洁的html5 svg模拟时钟特效插件.该插件通过简单的SVG图形来模拟时钟轮廓,然后使用JS代码让时钟动起来.你想查看jQuery版本的数字电子时钟的制作方法可以查看:使用JQUE ...

  10. 开源项目之 Wall Clock Control(模拟时钟)

    Wall Clock Control 是一个 MFC 的模拟时钟的组件,如图. 程序的主要成员: CWallClockSTm_Clock; CCalendar m_Calendar; COleDate ...

最新文章

  1. 07/11/08 资料整理
  2. 洛谷P5055 【模板】可持久化文艺平衡树(FHQ Treap)
  3. (上)python3 selenium3 从框架实现代码学习selenium让你事半功倍
  4. C++的new和delete
  5. Linq to Sql: 集成数据库语言查询之一
  6. Oracle Groundbreakers 亚太巡演 2021中国区精彩抢先看
  7. 韩顺平php视频笔记44 php小练习表单提交
  8. OpenSLR 中国镜像背后的数据存储服务商,原来是这样一家公司!
  9. java 构建者模式_Java不可变类–构建器模式
  10. JDBC-简单连接Oracle Database
  11. arcgis desktop10.2(arcmap)安装教程,已成功安装
  12. Anaconda卸载与安装
  13. 达梦数据库修改字段(列)(基表修改语句)
  14. Python 智能聊天机器人的实现
  15. 【含答案】心田花开:小学一年级语文上册期中试卷
  16. Gee引擎常用功能简介
  17. unity 远处模糊(贴图变模糊)
  18. python与人工智能关系论文_《Python深度学习》笔记:人工智能、机器学习与深度学习关系...
  19. 谈一谈|编程中的数学思维
  20. Tomcat修改访问域名

热门文章

  1. docker 启动容器的时候没-p 后面怎么加-p_基于Docker搭建基础自动化部署
  2. mysql数据库子查询练习_子查询以及sql练习
  3. 修改java的jre_applet访问本地资源,需要修改jre的java.policy
  4. jni ndk_带有NDK的Android JNI应用程序
  5. jquery获取元素的索引_如何在jQuery中获取具有特定索引的元素
  6. Spring 4 Security MVC登录注销示例
  7. 十佳程序员_面向非技术用户的十佳Web开发工具
  8. scala代码示例_Scala元组和地图示例
  9. C++基础之类的定义和对象的创捷,什么是类和对象?
  10. ECMAScript6(17):Class类