使用Quartz2D实现时钟动画(一)

要实现时钟效果,首先将素材表盘拖入工程

1.定义时针、分针、秒针三个图层类成员属性

@property(nonatomic,strong)CALayer *secondLayer;
@property(nonatomic,strong)CALayer *minuteLayer;
@property(nonatomic,strong)CALayer *hourLayer;

2.建立表盘图层,设置属性,并添加到父view上

//    创建时钟layer  设置属性
    CALayer *clockLayer=[CALayer layer];
    clockLayer.contents=(__bridge id _Nullable)([UIImage imageNamed:@"05-clock"].CGImage);
    clockLayer.position=self.view.center;
    clockLayer.bounds=CGRectMake(0, 0, 150, 150);
    [self.view.layer addSublayer:clockLayer];

3.接着我们创建指针图层

3.1 创建时针图层添加到时钟图层上

 // 创建时针layer,设置图层属性
    CALayer *hourLayer=[CALayer layer];
    hourLayer.backgroundColor=[UIColor  blackColor].CGColor;
    hourLayer.bounds=CGRectMake(0, 0,4, 45);
    hourLayer.position=CGPointMake(clockLayer.bounds.size.width*0.5, clockLayer.bounds.size.height*0.5);
    hourLayer.anchorPoint=CGPointMake(0.5, 0.75);
    //  修改时针的锚点
    [clockLayer addSublayer:hourLayer];
    _hourLayer=hourLayer;

3.2 创建分针图层添加到时钟图层上

//    创建分针layer,设置图层属性
    CALayer *minuteLayer=[CALayer layer];
    minuteLayer.backgroundColor=[UIColor  redColor].CGColor;
    minuteLayer.bounds=CGRectMake(0, 0, 4, 55);
    minuteLayer.position=CGPointMake(clockLayer.bounds.size.width*0.5, clockLayer.bounds.size.height*0.5);
    minuteLayer.anchorPoint=CGPointMake(0.5, 0.75);
    //  修改分针的锚点
    [clockLayer addSublayer:minuteLayer];
    _minuteLayer=minuteLayer;

3.3 创建秒针图层添加到时钟图层上

//    创建分针layer,设置图层属性
    CALayer *minuteLayer=[CALayer layer];
    minuteLayer.backgroundColor=[UIColor  redColor].CGColor;
    minuteLayer.bounds=CGRectMake(0, 0, 4, 55);
    minuteLayer.position=CGPointMake(clockLayer.bounds.size.width*0.5, clockLayer.bounds.size.height*0.5);
    minuteLayer.anchorPoint=CGPointMake(0.5, 0.75);
    //  修改分针的锚点
    [clockLayer addSublayer:minuteLayer];
    _minuteLayer=minuteLayer; 

4.使用CADisplayLink开启定时功能,实现实时刷新数据(也可以使用NSTimer方法)。

//  开启定时器,监控时间
    CADisplayLink *link=[CADisplayLink displayLinkWithTarget:self selector:@selector(startRotate)];
    [link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];

此时我们的工程界面已经搭载完毕,现在要做的时建立他们之间的关系,实现startRotate方法,让指针随着时间转动。

5.引入 NSCalendar获取现时时间

 NSCalendar *calendar=[NSCalendar currentCalendar];
   NSDateComponents *components= [calendar components:NSCalendarUnitSecond |NSCalendarUnitMinute |NSCalendarUnitHour fromDate:[NSDate date]];

获取时间属性

   //    获取秒数
    CGFloat sec=components.second;
    //    获取分钟数
    CGFloat minute=components.minute;
    //    获取小时
    CGFloat hour=components.hour;

6.接下来,我们需要理清时针,分针,秒针之间的关系。

#define perSecondA 6  //每秒钟秒针旋转6°
#define perMinuteA 6  //每分钟分针旋转6°
#define perHourA  30  //每小时时针旋转6°
#define perMinuteHourA 0.5   //每分钟时针旋转0.5°
#define  angle2randian(x)  ((x)/180.0*M_PI)    //角度转弧度

7.算出时针,分针,秒针需要旋转的度数。

   //    算出秒针旋转了多少度
    CGFloat secondA=sec *perSecondA;
    //    算出分针旋转了多少度
    CGFloat minuteA=minute*perMinuteA;
    //   算出时针旋转了多少度
    CGFloat hourA=hour*perHourA;
   //    时针与分针建立关系
    hourA +=minute*perMinuteHourA;

8.调用CATransform3DMakeRotation方法,实现指针跳转

self.secondLayer.transform= CATransform3DMakeRotation(angle2randian(secondA), 0, 0, 1);
  self.minuteLayer.transform=CATransform3DMakeRotation(angle2randian(minuteA), 0, 0, 1);
    self.hourLayer.transform=CATransform3DMakeRotation(angle2randian(hourA), 0, 0, 1);

最后运行工程。

时间: 2024-08-09 02:17:19

使用Quartz2D实现时钟动画(一)的相关文章

ios开发-UI进阶-核心动画-时钟动画小案例

[注意]转载时请注明出处博客园-吃唐僧肉的小悟空http://www.cnblogs.com/hukezhu/ 今天使用CALayer的"定位点(锚点)"实现了一个时钟动画,其实就是一个小的时钟,只是实现了功能,没有做出绚丽的效果.使用UIView实现的,其实只是单纯的使用layer也可以实现.主要用到了 Quartz2D画图\ 事件处理\核心动画方面的知识. 代码不是很多,直接附上源码,注释比较详细,在源码后面再进行解释其中的一些知识点和注意点. 下图为应用截图,使用gif,没有制作

14款超时尚的HTML5时钟动画

时钟动画在网页应用中也非常广泛,在一些个人博客中,我们经常会看到一些相当个性化的HTML5时钟动画.今天我们向大家分享了14款形态各异的超时尚HTML5时钟动画,其中有圆盘时钟.3D时钟.个性化时钟等,强大的HTML5为时钟动画增添了不少精彩,希望能给大家带来帮助. 1.可爱的CSS3圆盘时钟动画 今天要分享的也是一款可爱的CSS3圆盘时钟动画,时钟背景是乳白色的,显得非常干净,另外,时钟也可以和你本地的时候保持同步. 在线演示 源码下载 2.HTML5 SVG圆盘时钟动画 5种时钟样式 今天我

14款形态各异的超时尚HTML5时钟动画

14款超时尚的HTML5时钟动画(附源码)   时钟动画在网页应用中也非常广泛,在一些个人博客中,我们经常会看到一些相当个性化的HTML5时钟动画.今天我们向大家分享了14款形态各异的超时尚HTML5时钟动画,其中有圆盘时钟.3D时钟.个性化时钟等,强大的HTML5为时钟动画增添了不少精彩,希望能给大家带来帮助. 1.可爱的CSS3圆盘时钟动画 在线演示:http://www.html5tricks.com/demo/css3-circle-clock/index.html 源码下载:http:

iOS中的时钟动画

iOS 动画效果非常多,我们在开发中可能会遇到很多动画特效,我们就会用到核心动画框架CoreAnimation,核心动画里面的动画效果有很多,都是在QuartzCore.framework框架里面,今天我们看看其只一个CADisplayLink使用,并且完成一个雪花效果: 效果图如下: 1.引入框架 2.引入头文件 CADisplayLink最主要的特征是能提供一个周期性的调用我们赋给它的selector的机制,从这点上看它很像定时器NSTimer. CADisplayLink是一个能让我们以和

利用html5制作一个时钟动画

1 <canvas id="clock" width="500" height="500" style="background-color: yellow"></canvas> 1 var clock=document.getElementById("clock"); 2 var cxt=clock.getContext("2d"); 3 function dra

15个超强悍的CSS3圆盘时钟动画赏析

在网页上,特别是个人博客中经常会用到时钟插件,一款个性化的时钟插件不仅可以让页面显得美观,而且可以让访客看到当前的日期和时间.今天我们给大家收集了15个超强悍的圆盘时钟动画,很多都是基于CSS3,也有一部分利用jQuery和SVG,让我们一起来看看吧. 1.纯CSS3/SVG实现的带秒针表盘圆盘复古时钟 现在的网页上圆盘时钟越来越少见了,更多的是数字时钟和数字日历.之前我们分享过一些基于jQuery和CSS3的圆盘时钟动画,比如纯CSS3 3D立体圆盘时钟动画和jQuery实现一个挂在墙上的圆盘

C# WPF 时钟动画(1/2)

微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏. C# WPF 时钟动画(1/2) 内容目录 实现效果 业务场景 编码实现 本文参考 源码下载 1.实现效果 目前只实现了秒针动画,下篇文章实现完整效果,可在网站上查看,微信公众号今天只发布了一篇. 效果 2.业务场景 玩具 3.编码实现 工程简单,只更改一个主窗体文件,另加一个时钟背景图片 3.1 主窗体 MainWindow.xaml 布局时钟的时针.分针.秒针,及添加秒针动画,秒针动画写

时钟动画

序言 笔者对动画是很钟情的,今天我们一起来学习学习如何通过Core Animation实现钟的秒针.分针和时针无限动画移动,与苹果手机上的世界闹钟中的秒针.分针和时针类似.通过观察,笔者感觉是动画来实现的,而不是定时针. 不过,这里提供了两种方式来实现: 通过定时器实现刷新,与挂钟一样,移动没有动画效果 通过Core Animation实现,与苹果的世界时钟一样,动画均匀地移动 效果图 关于时针.分针和秒针 这里我们为了更轻量一些,直接继承于UIView,而不是UIImageView.将图片直接

仿写及比较标哥的iOS时钟动画

一.前言 以前看各种绚丽的UI特效动画代码,采用的方法是会先运行一篇,然后直接去看实现代码.初学时抱着瞻仰的态度去接触,去认识,是没有错的.但是在了解了像素.动画渲染机制,CoreAnimation API,推导过二维.三维的仿射矩阵之后,我们可以改变阅读UI动画博文或者是源码的方式了. Talk is cheap, show me the code——Linus Torvalds. 大量的仿写:一定一定要多写——叶孤城__ 在CodeReview线下大会上的发言. 最近安居客.猿题库.蘑菇街.