欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

iOS时钟开发案例分享

程序员文章站 2023-11-23 22:43:28
本文实例为大家介绍了ios时钟开发过程,供大家参考,具体内容如下 思路就是利用calayer的隐式动画来实现。因为uiview的非根层也就是手动创建的layer在其属性发...

本文实例为大家介绍了ios时钟开发过程,供大家参考,具体内容如下

思路就是利用calayer的隐式动画来实现。因为uiview的非根层也就是手动创建的layer在其属性发生变化时会默认会产生动画效果,这些属性也叫作可动画属性。比如bounds、backgroundcolor、position。

时钟里面表盘就是一个uiview,而三根针就是三个手动创建的layer。

先在storyboard上弄一个uiimageview,设置表盘图片

iOS时钟开发案例分享

然后在viewdidload中初始化三根针,并设置定时器,获取当前时间,将当前时间对应的时针分针秒针分别指向对应的角度。

//
// viewcontroller.m
// 时钟效果
//
// created by daniel on 16/4/7.
// copyright © 2016年 daniel. all rights reserved.
//
 
#define kclockwh _clockview.bounds.size.width
 
//一秒钟秒针转多少度
#define preseconda 6
 
//一分钟分针转多少度
#define preminutea 6
 
//一小时时针转多少度
#define prehoura 30
 
//每分钟时针转多少度
#define prehourminute 0.5
 
//每秒钟分针转多少度
#define preminutesecond 0.1
 
#define angle2raditon(a) ((a) / 180.0 * m_pi)
 
#import "viewcontroller.h"
 
@interface viewcontroller ()
@property (weak, nonatomic) iboutlet uiimageview *clockview;
 
/** 秒针 */
@property(nonatomic, strong) calayer *secondl;
 
/** 分针 */
@property(nonatomic, strong) calayer *minutel;
 
/** 时针 */
@property(nonatomic, strong) calayer *hourl;
 
@end
 
@implementation viewcontroller
 
- (void)viewdidload {
  [super viewdidload];
   
  //添加时针
  [self setuphourlayer];
   
  //添加分针
  [self setupminutelayer];
  
  //添加秒针
  [self setupsecondlayer];
   
  //添加定时器
  [nstimer scheduledtimerwithtimeinterval:1 target:self selector:@selector(timechange) userinfo:nil repeats:yes];
   
  //开始运行时就获取时间,这样在启动时就不会有停顿的感觉
  [self timechange];
   
}
 
- (void)timechange {
   
  //获取当前系统时间
  nscalendar *calendar = [nscalendar currentcalendar];
   
  nsdatecomponents *cmp = [calendar components:nscalendarunitsecond | nscalendarunitminute | nscalendarunithour fromdate:[nsdate date]];
   
  //获取秒
  nsinteger second = cmp.second;
   
  //获取分
  nsinteger minute = cmp.minute;
   
  //获取小时
  nsinteger hour = cmp.hour;
   
  //计算秒针转多少度
  cgfloat seconda = second * preseconda;
   
  //计算分针转多少度
  cgfloat minutea = minute * preminutea + second * preminutesecond;
   
  //计算时针转多少度
  cgfloat houra = hour * prehoura + minute * prehourminute;
   
  //旋转秒针
  _secondl.transform = catransform3dmakerotation(angle2raditon(seconda), 0, 0, 1);
   
  //旋转分针
  _minutel.transform = catransform3dmakerotation(angle2raditon(minutea), 0, 0, 1);
   
  //旋转时针
  _hourl.transform = catransform3dmakerotation(angle2raditon(houra), 0, 0, 1);
   
}
 
#pragma mark - 初始化时针
- (void)setuphourlayer {
   
  calayer *hourl = [calayer layer];
   
  //设置秒针背景色
  hourl.backgroundcolor = [uicolor blackcolor].cgcolor;
   
  //设置秒针锚点
  hourl.anchorpoint = cgpointmake(0.5, 1);
   
  //设置秒针锚点在父控件的位置
  hourl.position = cgpointmake(kclockwh * 0.5, kclockwh * 0.5);
   
  hourl.cornerradius = 4;
   
  //设置秒针bounds
  hourl.bounds = cgrectmake(0, 0, 4, kclockwh * 0.5 - 40);
   
  //把秒针添加到clockview图层上
  [_clockview.layer addsublayer:hourl];
   
  _hourl = hourl;
   
}
 
 
#pragma mark - 初始化分针
- (void)setupminutelayer {
   
  calayer *minutel = [calayer layer];
   
  //设置秒针背景色
  minutel.backgroundcolor = [uicolor blackcolor].cgcolor;
   
  //设置秒针锚点
  minutel.anchorpoint = cgpointmake(0.5, 1);
   
  //设置秒针锚点在父控件的位置
  minutel.position = cgpointmake(kclockwh * 0.5, kclockwh * 0.5);
   
  minutel.cornerradius = 4;
   
  //设置秒针bounds
  minutel.bounds = cgrectmake(0, 0, 4, kclockwh * 0.5 - 20);
   
  //把秒针添加到clockview图层上
  [_clockview.layer addsublayer:minutel];
   
  _minutel = minutel;
   
}
 
#pragma mark - 初始化秒针
- (void)setupsecondlayer {
   
  calayer *secondl = [calayer layer];
   
  //设置秒针背景色
  secondl.backgroundcolor = [uicolor redcolor].cgcolor;
   
  //设置秒针锚点
  secondl.anchorpoint = cgpointmake(0.5, 1);
   
  //设置秒针锚点在父控件的位置
  secondl.position = cgpointmake(kclockwh * 0.5, kclockwh * 0.5);
   
   
  //设置秒针bounds
  secondl.bounds = cgrectmake(0, 0, 1.5, kclockwh * 0.5 - 20);
   
  //把秒针添加到clockview图层上
  [_clockview.layer addsublayer:secondl];
   
  _secondl = secondl;
   
}
 
 
@end

效果图:

iOS时钟开发案例分享

以上就是本文的全部内容,希望对大家学习ios程序设计有所帮助。