IOS第18天(4,核心动画,时钟效果,定时器,图片旋转角度,CALayer 锚点,获取当前,小时,秒,分)
****
- #import "HMViewController.h"
- // 每秒秒针转6度
- #define perSecendA 6
- // 每分钟分针转6度
- #define perMinuteA 6
- // 每小时时针转6度
- #define perHourA 30
- // 每分钟时针转6度
- #define perMinuteHourA 0.5
- #define angle2radian(x) ((x) / 180.0 * M_PI)
- @interface HMViewController ()
- {
- CALayer *_second;
- CALayer *_minute;
- CALayer *_hour;
- }
- @property (weak, nonatomic) IBOutlet UIView *redView;
- @property (weak, nonatomic) IBOutlet UIImageView *clockView;
- @end
- @implementation HMViewController
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- // Do any additional setup after loading the view, typically from a nib.
- // 1.添加秒针
- [self addSecond];
- // 2.添加分针
- [self addMintue];
- // 3.添加时针
- [self addHour];
- // 创建定时器
- [NSTimer scheduledTimerWithTimeInterval: target:self selector:@selector(update) userInfo:nil repeats:YES];
- [self update];
- }
- - (void)addHour
- {
- CGFloat imageW = _clockView.bounds.size.width;
- CGFloat imageH = _clockView.bounds.size.height;
- // 1.添加时针
- CALayer *hour = [CALayer layer];
- // 2.设置锚点
- hour.anchorPoint = CGPointMake(0.5, );
- // 3.设置位置
- hour.position = CGPointMake(imageW * 0.5, imageH * 0.5);
- // 4.设置尺寸
- hour.bounds = CGRectMake(, , , imageH * 0.5 - );
- // 5.红色
- hour.backgroundColor = [UIColor blackColor].CGColor;
- hour.cornerRadius = ;
- // 添加到图层上
- [_clockView.layer addSublayer:hour];
- _hour = hour;
- }
- // 添加分针
- - (void)addMintue
- {
- CGFloat imageW = _clockView.bounds.size.width;
- CGFloat imageH = _clockView.bounds.size.height;
- // 1.添加分针
- CALayer *minute = [CALayer layer];
- // 2.设置锚点
- minute.anchorPoint = CGPointMake(0.5, );
- // 3.设置位置
- minute.position = CGPointMake(imageW * 0.5, imageH * 0.5);
- // 4.设置尺寸
- minute.bounds = CGRectMake(, , , imageH * 0.5 - );
- // 5.红色
- minute.backgroundColor = [UIColor blueColor].CGColor;
- // 添加到图层上
- [_clockView.layer addSublayer:minute];
- _minute = minute;
- }
- // 添加秒针
- - (void)addSecond
- {
- CGFloat imageW = _clockView.bounds.size.width;
- CGFloat imageH = _clockView.bounds.size.height;
- // 1.添加秒针
- CALayer *second = [CALayer layer];
- // 2.设置锚点
- second.anchorPoint = CGPointMake(0.5, );
- // 3.设置位置
- second.position = CGPointMake(imageW * 0.5, imageH * 0.5);
- // 4.设置尺寸
- second.bounds = CGRectMake(, , , imageH * 0.5 - );
- // 5.红色
- second.backgroundColor = [UIColor redColor].CGColor;
- // 添加到图层上
- [_clockView.layer addSublayer:second];
- _second = second;
- }
- - (void)update
- {
- // 获取秒数
- // 获取日历对象
- NSCalendar *calendar = [NSCalendar currentCalendar];
- // 获取日期组件
- NSDateComponents *compoents = [calendar components:NSCalendarUnitSecond | NSCalendarUnitMinute | NSCalendarUnitHour fromDate:[NSDate date]];
- // 获取秒数
- CGFloat sec = compoents.second;
- // 获取分钟
- CGFloat minute = compoents.minute;
- // 获取小时
- CGFloat hour = compoents.hour;
- // 算出秒针旋转多少°
- CGFloat secondA = sec * perSecendA;
- // 算出分针旋转多少°
- CGFloat minuteA = minute * perMinuteA;
- // 算出时针旋转多少°
- CGFloat hourA = hour * perHourA;
- hourA += minute * perMinuteHourA;
- // 旋转秒针
- _second.transform = CATransform3DMakeRotation(angle2radian(secondA), , , );
- // 旋转分针
- _minute.transform = CATransform3DMakeRotation(angle2radian(minuteA), , , );
- // 旋转时针
- _hour.transform = CATransform3DMakeRotation(angle2radian(hourA), , , );
- }
- @end
IOS第18天(4,核心动画,时钟效果,定时器,图片旋转角度,CALayer 锚点,获取当前,小时,秒,分)的更多相关文章
- IOS第18天(9,核心动画-动画组)
****动画组 // 核心动画都是假象,不能改变layer的真实属性的值// 展示的位置和实际的位置不同.实际位置永远在最开始位置 #import "HMViewController.h&q ...
- IOS第18天(1,核心动画layer, 旋转,缩放,平移,边框,剪裁,圆角)
****动画效果 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [UIView animateWithDurat ...
- IOS第18天(10,核心动画-转盘,自定义buton,旋转动画)
*****HMViewController.m #import "HMViewController.h" #import "HMWheelView.h" @in ...
- IOS第18天(8,核心动画转场动画)
***翻页效果 #import "HMViewController.h" @interface HMViewController () @property (weak, nonat ...
- [iOS UI进阶 - 6.1] 核心动画CoreAnimation
A.基本知识 1.概念 Core Animation是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍,使用它需要先添加QuartzCore.framework和引入对 ...
- [iOS UI进阶 - 6.2] 核心动画CoreAnimation 练习代码
A.基本用法 1.CABasicAnimation // // ViewController.m // CoreAnimationTest // // Created by hellovoidworl ...
- iOS UI进阶-3.0 核心动画
Core Animation是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍,使用它需要先添加QuartzCore.framework和引入对应的框架<Quar ...
- ios开发图层layer与核心动画二:CATransform3D,CAlayear和UIView区别,layer的position和anchorpoint
一:CATransform3D #import "ViewController.h" @interface ViewController () @property (weak, n ...
- ios开发之图层与核心动画一:图层CALayer的认识
#import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IBOutl ...
随机推荐
- Linux IO模型和网络编程模型
术语概念描述: IO有内存IO.网络IO和磁盘IO三种,通常我们说的IO指的是后两者. 阻塞和非阻塞,是函数/方法的实现方式,即在数据就绪之前是立刻返回还是等待. 以文件IO为例,一个IO读过程是文件 ...
- 模数转换(A/D)和数模转换(D/A) 图示
(从书中截图) 在时间域和频率域中示意图: 1.A/D转换 2.D/A转换
- 【gulp-sass】error: File to import not found or unreadable
简要记录一下在使用gulp-sass时候踩的坑,虽然不明所以然,但是似乎在https://github.com/dlmanning/gulp-sass/issues/1 找到了答案. 在使用gulpf ...
- Type.GetField 修改类中私有字段。
上一篇Popup Bug中修改了SystemParameters类中静态只读属性MenuDropAlignment. var t = typeof(SystemParameters); var fie ...
- MFC MessageBox AfxMessageBox
MessageBox 一.消息框是个很常用的控件,属性比较多,本文列出了它的一些常用方法,及指出了它的一些应用场合.1.MessageBox("这是一个最简单的消息框!");2.M ...
- Open CV 播放视频(2)
演示:读取一个视频,然后播放,ESC退出. #include "stdafx.h" #include <opencv2/core/core.hpp> # ...
- BZOJ4428 : [Nwerc2015]Debugging调试
设$f[i]$为最优策略下调试$i$行代码的时间,则: $f[1]=0$ $f[i]=\min((j-1)\times p+f[\lceil\frac{i}{j}\rceil])+r$ 意义为枚举pr ...
- 【BZOJ1984】月下“毛景树” 树链剖分+线段树
[BZOJ1984]月下"毛景树" Description 毛毛虫经过及时的变形,最终逃过的一劫,离开了菜妈的菜园. 毛毛虫经过千山万水,历尽千辛万苦,最后来到了小小的绍兴一中的校 ...
- Activiti工作流学习(二)流程实例、执行对象、任务
一.前言 前面说明了基本的流程部署.定义,启动流程实例等基本操作,下面我们继续来学习流程实例.执行对象.任务. 二.流程实例.执行对象说明 整个Activiti的生命周期经过了如下的几个步骤: 1.流 ...
- Universal JS module loader
With dependency ;(function (root, factory) { if (typeof define === 'function' && define.amd) ...