iOS时钟,秒针扫秒样式
昨天做一个时钟小demo,发现了一些问题.
描述能力有限,我封装好了一个时钟框架,朋友们可以参考 https://github.com/qianlishun/ClockView
点击这里可以直接下载 Download ZIP
有两种定时器可以用于实现,
在这里我最开始使用了NSTimer
[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateTimer) userInfo:nil repeats:YES];
使用过程中发现会有误差,即读取本地系统时间时这一秒的0.99秒读到定义的表盘上也会是0秒.不过也可以把 scheduledTimerWithTimeInterval 设定的很小来解决.
最后使用了CADisplayLink
// link默认是1/60 秒执行一次
CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(updateTimer)];
//执行定时器 把定时器放在主运行循环中执行
[link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
获取系统时间
// 实例化日历对象
NSCalendar *calendar = [NSCalendar currentCalendar];
// 获取当前时间的秒数
NSDateComponents *comps = [calendar components:NSCalendarUnitSecond fromDate:[NSDate date]]; // 获取当前时间的分钟数
NSDateComponents *minute = [calendar components:NSCalendarUnitMinute fromDate:[NSDate date]]; // 获取当前时间的小时数
NSDateComponents *hour = [calendar components:NSCalendarUnitHour fromDate:[NSDate date]];
根据系统时间设置时钟指针旋转
//秒针
CGFloat angle = degree2angle(comps.second * /);
secHand.affineTransform = CGAffineTransformMakeRotation(angle); // 分针
CGFloat angleM = degree2angle(minute.minute * /);
minHand.affineTransform = CGAffineTransformMakeRotation(angleM); // 时针
CGFloat angleH = degree2angle(hour.hour * + minute.minute/10.0 * );
hourHand.affineTransform = CGAffineTransformMakeRotation(angleH);
最后,秒针的旋转样式是一秒一跳,于是想做一个扫秒式的旋转.
这种秒针旋转样式是一秒一跳
写在 定时器的监听方法updateTimer里
#define degree2angle(angle) ((angle) * M_PI / 180)
CGFloat angle = degree2angle(comps.second * /);
secHand.affineTransform = CGAffineTransformMakeRotation(angle);
如果想设置为扫秒,则使用CGAffineTransformRotate,每次刷新都走很小的一个角度,这样看起来就是连续的扫秒
secHand.affineTransform = CGAffineTransformRotate(secHand.affineTransform, M_PI * /);
这里因为没有使用根据当前系统的秒数来控制旋转, 所以需要在初始化表盘时将秒针位置也初始化为系统时间
// 初始化秒针
- (void)secHandRoll{
// 实例化日历对象
NSCalendar *calendar = [NSCalendar currentCalendar];
// 获取当前时间的秒数
NSDateComponents *comps = [calendar components:NSCalendarUnitSecond fromDate:[NSDate date]];
CGFloat angle = degree2angle(comps.second * /);
//初始化秒针位置
secHand.affineTransform = CGAffineTransformMakeRotation(angle);
}
iOS时钟,秒针扫秒样式的更多相关文章
- iOS 绘制一个表盘时钟,秒针效果可以“扫秒/游走”
最近自己 也尝试写了一个表盘时钟,初衷源于等车时候一个老奶奶问时间,我打开手机,时间数字对我来说相对敏感,但是老奶奶是看不清的,我想识别 还是看表盘 老远 看时针分针角度就可以识别当前时间. 于是我想 ...
- 【Win10】时钟精确到秒
[Win10]时钟精确到秒 前言 想要桌面右下角的时钟"xx:xx:xx"精确到秒,可以使用绿色免费开源软件Dism++,也可以从该软件的代码中读到方法:用注册表实现. 步骤 进入 ...
- iOS 时钟动画
在iOS开发中,定时器NSTimer并不能够准确的出发,通常使用NSTimer只能控制不需要精确处理的操作,而CADisplayLink就是在每次屏幕刷新时,通知系统.CADisplayLink最大的 ...
- ios html5 网页取消默认样式
ios的的默认样式修改成扁平化的样式 重要的一句css -webkit-appearance: none; 将样式清除 单数会出现将raido的选择按钮也会消失 所以需要对radio的样式进行重新 ...
- IOS第六天(2:10秒倒计时)
****************10秒倒计时 #import "HMViewController.h" @interface HMViewController () <UIA ...
- IOS下移除按钮原生样式 -webkit-appearance
IOS环境下的按钮都是经过美化的,但通常我们在设计web app的时候不需要这些看上去老土的样式,所以,去除这些显得很有必要. 下面这句代码就是重置这些样式的: -webkit-appearance: ...
- 移除IOS下按钮的原生样式
写WAP页面的时候 一定要加上这组样式,以避免在IOS下面按钮被系统原生样式影响 input,textarea {outline-style:none;-webkit-appearance:none ...
- iOS下移除按钮原生样式
按钮样式,在 Android 手机浏览器中显示正常,但在 iOS Safari 浏览器中会看到按钮显示为圆角样式,设置 border-radius:0; 也不好使. 这是因为iPhone.iPad 设 ...
- 设置DevExpress GridControl控件时间列显示时、分、秒样式
如题,如果Dev GridControl控件绑定DataTable数据源时,DataTable中的某一列为Date类型时,GridControl默认显示样式只显示当前日期,并不会将时.分.秒显示出来. ...
随机推荐
- [转]Linq 如何实现 in 与 not in
本文转自:http://blog.csdn.net/zhangyumei/article/details/5620363 接触 LINQ 也有很长的一段时间了,有些在 SQL 语句中用的很顺手的东西在 ...
- C/S WinForm自动升级
这二天刚好完成一个C/S 自动升级的功能 代码分享一下 /// <summary> /// 版本检测 /// </summary> public class ...
- CF778A(round 402 div.2 D) String Game
题意: Little Nastya has a hobby, she likes to remove some letters from word, to obtain another word. B ...
- sed.exe 在bat中使用时,需要另外起一个文件
今天在windows使用sed.exe时,同一个文件死活不生效,然后换了一个bat,再来调用,就可以了,怀疑跟sed.exe的代码有关.有时间再研究
- 如何正确理解和使用 Activity的4种启动模式
关于Activity启动模式的文章已经很多,但有的文章写得过于简单,有的则过于注重细节,本文想取一个折中,只关注最重要和最常用的概念,原理和使用方法,便于读者正确应用. Activity的启动模式有4 ...
- pspad的一个怪现象:在一些空行的位置出现个别不该出现的字符
在用pspad编辑一个外来文件时,发现有许多空行的结尾会出现一些单个字符,字符内容与翻页前那一页相应位置的字符相同. 好奇怪.上网找不到原因.pspad太好用了,不想因此放弃. 仔细观察,这些空行往往 ...
- C程序(1)
- 模板引擎freemarker的使用(二)
freemarker默认配置使用时,如果传到前端的值为null或者不存在,后台会报错. 处理方法: <bean id="freemarkerConfig" class=&qu ...
- 模板引擎freemarker的使用(一)
配置 了解和学习一下freemarker在项目中的配置与使用,顺便记录下来,知识源于分享,进步源于交流... 我是在ssm中配置的. maven 中需要引入的依赖 <!-- freemarker ...
- fio测试nvme性能
#cat /sys/block/nvme0n1/queue/scheduler none #cat /sys/block/sda/queue/scheduler noop deadline [cfq] ...