iOS时钟开发案例分享

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

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

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

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

然后在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程序设计有所帮助。

(0)

相关推荐

  • 简单讲解iOS应用开发中的MD5加密的相关使用

    一.简单说明 1.说明 在开发应用的时候,数据的安全性至关重要,而仅仅用POST请求提交用户的隐私数据,还是不能完全解决安全问题. 如:可以利用软件(比如Charles)设置代理服务器,拦截查看手机的请求数据 "青花瓷"软件 因此:提交用户的隐私数据时,一定不要明文提交,要加密处理后再提交 2.常见的加密算法 MD5 \ SHA \ DES \ 3DES \ RC2和RC4 \ RSA \ IDEA \ DSA \ AES 3.加密算法的选择 一般公司都会有一套自己的加密方案,按照公司

  • iOS开发中导航控制器的基本使用教程

    多控制器和导航控制器简单介绍 一.多控制器 一个iOS的app很少只由一个控制器组成,除非这个app极其简单.当app中有多个控制器的时候,我们就需要对这些控制器进行管理 有多个view时,可以用一个大的view去管理1个或者多个小view,控制器也是如此,用1个控制器去管理其他多个控制器 比如,用一个控制器A去管理3个控制器B.C.D.控制器A被称为控制器B.C.D的"父控制器":控制器B.C.D的被称为控制器A的"子控制器" 为了便于管理控制器,iOS提供了2个

  • iOS应用开发中导航栏按钮UIBarButtonItem的添加教程

    1.UINavigationController导航控制器如何使用 UINavigationController可以翻译为导航控制器,在iOS里经常用到. 我们看看它的如何使用: 下面的图显示了导航控制器的流程.最左侧是根视图,当用户点击其中的General项时 ,General视图会滑入屏幕:当用户继续点击Auto-Lock项时,Auto-Lock视图将滑入屏幕.相应地,在对象管理上,导航控制器使用了导航堆栈.根视图控制器在堆栈最底层,接下来入栈的是General视图控制器和Auto-Lock

  • iOS开发中使用UILabel设置字体的相关技巧小结

    一.初始化 复制代码 代码如下: UILabel *myLabel = [[UILabel alloc] initWithFrame:CGRectMake(40, 40, 120, 44)];      [self.view addSubview:myLabel]; 二.设置文字 1.设置默认文本 复制代码 代码如下: NSString *text = @"标签文本"; myLabel.text = text; 效果: 2.设置标签文本(此属性是iOS6.0之后才出现,如若不是必要,不

  • iOS应用开发中实现页面跳转的简单方法笔记

    作为新手写的笔记,方便自己记忆: 从android转过来iOS的,对于页面的跳转,找了很多资料,现在记录一下页面跳转的方法. 1.用navigationController 2.直接跳(刚刚在网上找到的,不太熟,有错莫怪) 1.建一个RootViewController,在delegate.h 复制代码 代码如下: @property (strong, nonatomic) UIViewController *viewController; @property (strong, nonatomi

  • IOS中快速集成短信SDK验证开发(SMSSDK),IOS开发中如何设置手机短信验证码

    嘿嘿..sdk是别人的,我只是下载来集成一下. smssdk下载网站:http://www.mob.com/(也有其他很多网站有类似SDK,譬如https://www.juhe.cn/等等,可以自行百度,我在这里就演示一下MOB官网的) 此网站号称smssdk免费,可是进去一看........ 每天免费20条,上限登记了才永久免费.不多说了,开始...... 官网集成文档http://wiki.mob.com/ [1~3步]我就截图官方文档了,傻瓜式操作 [4.1]:先看官网说明: [4.2]再

  • iOS开发中WebView的基本使用方法简介

    1.使用UIWebView加载网页 运行XCode 4.3,新建一个Single View Application,命名为WebViewDemo. 2.加载WebView 在ViewController.h添加WebView成员变量和在ViewController.m添加实现 复制代码 代码如下: #import <UIKit/UIKit.h> @interface ViewController : UIViewController {     UIWebView *webView; } @e

  • iOS开发中使用UIScrollView实现图片轮播和点击加载

    UIScrollView控件实现图片轮播 一.实现效果 实现图片的自动轮播 二.实现代码 storyboard中布局 代码: 复制代码 代码如下: #import "YYViewController.h" @interface YYViewController () <UIScrollViewDelegate> @property (weak, nonatomic) IBOutlet UIScrollView *scrollview; /**  *  页码  */ @pro

  • iOS开发中音频工具类的封装以及音乐播放器的细节控制

    一.控制器间数据传递 两个控制器之间数据的传递 第一种方法: 复制代码 代码如下: self.parentViewController.music=self.music[indexPath.row]; 不能满足 第二种做法:把整个数组传递给它 第三种做法:设置一个数据源,设置播放控制器的数据源是这个控制器.self.parentViewController.dataSource=self;好处:没有耦合性,任何实现了协议的可以作为数据源. 第四种做法:把整个项目会使用到的音频资源交给一个工具类去

  • iOS开发中UIDatePicker控件的使用方法简介

    iOS上的选择时间日期的控件是这样的,左边是时间和日期混合,右边是单纯的日期模式. 您可以选择自己需要的模式,Time, Date,Date and Time  , Count Down Timer四种模式. 本篇文章简单介绍下PickerDate控件的使用 1.新建一个Singe View Application,命名为DatePickDemo,其他设置如图 2.放置控件 打开ViewController.xib,拖拽一个DatePicker控件放到界面上,再拖拽一个Button控件放到界面上

随机推荐