iOS时钟开发案例分享_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程序设计有所帮助。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索iOS时钟开发
iOS时钟
ios开发 数字时钟、ios 时钟开发、ios开发分享功能、ios开发友盟分享、ios开发技术分享,以便于您获取更多的相关知识。

时间: 2025-01-21 09:48:19

iOS时钟开发案例分享_IOS的相关文章

iOS简单画板开发案例分享_IOS

最近在学习Quartz2D,学习了一个简单画板的实现,现在把实现过程记录一下. 主要用到的点就是画线,截屏,绘制图片,选择图片,以及保存所有绘制的线. 首先在storyboard上布局好控件,设置约束等等,最后的效果是这样: 自定义画板DrawView,使用时可能是从xib中加载,也可能是手动创建,所以创建对象的方法需要实现两个: #import <UIKit/UIKit.h> @interface DrawView : UIView /** 线宽 */ @property (nonatomi

iOS抽屉效果开发案例分享_IOS

本文实例为大家分享了iOS抽屉效果开发实例,供大家参考,具体内容如下 在显示在窗口的控制器上添加三个view(如果只需要往一边滑动就只加2个view) 先声明三个view #import "ViewController.h" @interface ViewController () @property(nonatomic, weak) UIView *mainV; @property(nonatomic, weak) UIView *leftV; @property(nonatomic

Android多功能时钟开发案例(实战篇)_Android

上一篇为大家介绍的是Android多功能时钟开发基础内容,大家可以回顾一下,Android多功能时钟开发案例(基础篇) 接下来进入实战,快点来学习吧. 一.时钟在布局文件中我们看到,界面上只有一个TextView,这个TextView的作用就是显示一个系统的当前时间,同时这个时间还是一秒一秒跳的,要实现一秒一秒的跳就需要我们每隔一秒就要刷新一下,同时我们这里还考虑了切换到另一个Tab的时候,这个时间就不跳动了,这样就会减少这个对系统的占用,考虑到了这点我们在这里用到了Handler,通过hand

Android多功能时钟开发案例(实战篇)

上一篇为大家介绍的是Android多功能时钟开发基础内容,大家可以回顾一下,Android多功能时钟开发案例(基础篇) 接下来进入实战,快点来学习吧. 一.时钟 在布局文件中我们看到,界面上只有一个TextView,这个TextView的作用就是显示一个系统的当前时间,同时这个时间还是一秒一秒跳的,要实现一秒一秒的跳就需要我们每隔一秒就要刷新一下,同时我们这里还考虑了切换到另一个Tab的时候,这个时间就不跳动了,这样就会减少这个对系统的占用,考虑到了这点我们在这里用到了Handler,通过han

iOS多线程开发——NSThread浅析_IOS

在iOS开发中,多线程的实现方式主要有三种,NSThread.NSOperation和GCD,我前面博客中对NSOperation和GCD有了较为详细的实现,为了学习的完整性,今天我们主要从代码层面来实现NSThread的使用.案例代码上传至 https://github.com/chenyufeng1991/NSThread. (1)初始化并启动一个线程 - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated

Android多功能时钟开发案例(基础篇)

本文我们进入Android多功能时钟开发实战学习,具体的效果可以参考手机上的时钟,内容如下 首先我们来看一看布局文件layout_main.xml 整个布局: <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/container" android:layout_width="match_parent" androi

Android多媒体之画画板开发案例分享_Android

先看看效果: 其实画画板的原理很简单,就是首先记录下按下屏幕的点,然后每移动一下就让这两次移动的点连线,周而复始,图像就由很多条直线构成了. 核心代码 : public class MainActivity extends Activity implements OnClickListener,OnSeekBarChangeListener { private View red_view,green_view,blue_view; //控制画笔颜色的三块区域 private SeekBar se

iOS基础动画教程分享_IOS

iOS的动画多种多样,动画做的好的应用会更加吸引人,用起来也会更加炫目,本文介绍iOS几种基础动画,单个讲解便于理解,但真正使用时,结合起来用会看起来更加帅,这就看具体的应用场景和大家的想象力啦. 所有的基础动画都给予UIView一个基础的方法:animateWithDuration.这个方法可以包含一个代码块,里面设置要改变的东西,在执行的时候iOS会自动以动画的形式展现出来,代码如下: [UIView animateWithDuration:1 animations:^{ // 要执行的动作

Android扫描本地音乐文件开发案例分享_Android

一.前言 本来觉得so easy,真是没想到,还搞了老半天,搞的我大汗淋漓,要拍桌子摔键盘了. 本想实现的功能是: 通过网易云音乐/百度音乐/QQ音乐/酷狗音乐中一个API,通过关键词/歌手/歌词来搜索相关歌曲信息,然后在线播放.下载到本地,不过目前来看,使用API还是有一点问题.通过浏览器访问,问题不大,例如下图: 但是想通过手机访问的时候,问题就出现了,同样的参数,结果很不一样,而且基本搜不到自己想要的,后来换做通过自己的服务器去访问,还是搜不到,后来查了一下资料,暂时也没解决.于是,目前就