iOS实现简易钟表

 更新时间:2020年02月21日 07:33:40   作者:LayneCheung  
这篇文章主要为大家详细介绍了iOS实现简易钟表,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了iOS实现简易钟表的具体代码,供大家参考,具体内容如下

效果图:

注意:表盘是一个UIImageView控件,设置image为表盘图片

核心代码:

//
// ViewController.m
// 时钟
//
// Created by llkj on 2017/8/29.
// Copyright © 2017年 LayneCheung. All rights reserved.
//

#import "ViewController.h"

//每一秒旋转多少度
#define perSecA 6
//每一分旋转多少度
#define perMinA 6
//每一小时旋转多少度
#define perHourA 30

//每一分时针旋转的度数
#define perMinHour 0.5
//角度转弧度
#define angle2Rad(angle) ((angle) / 180.0 * M_PI)
@interface ViewController ()

@property (weak, nonatomic) IBOutlet UIImageView *clockView;
@property (nonatomic, weak) CALayer *secL;
@property (nonatomic, weak) CALayer *minL;
@property (nonatomic, weak) CALayer *hourL;
@end

@implementation ViewController

- (void)viewDidLoad {
 [super viewDidLoad];

 [self setHour];
 [self setMin];
 [self setSec];

 [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timeChange) userInfo:nil repeats:YES];
 [self timeChange];
}

- (void)timeChange{

 //获取当前秒
 NSCalendar *cal = [NSCalendar currentCalendar];
 NSDateComponents *cmp = [cal components:NSCalendarUnitSecond | NSCalendarUnitMinute | NSCalendarUnitHour fromDate:[NSDate date]];
 NSInteger curSec = cmp.second + 1;
 NSInteger curMin = cmp.minute;
 NSInteger curHour = cmp.hour;

 //秒针开始旋转
 //计算秒针当前旋转的角度
 // angle = 当前多少秒 * 每一秒旋转多少度
 CGFloat secA = curSec * perSecA;
 //旋转方向是Z轴
 self.secL.transform = CATransform3DMakeRotation(angle2Rad(secA), 0, 0, 1);


 //分针开始旋转
 //计算分针当前旋转的角度
 // angle = 当前多少分 * 每一分旋转多少度
 CGFloat minA = curMin * perMinA;
 self.minL.transform = CATransform3DMakeRotation(angle2Rad(minA), 0, 0, 1);


 //时针开始旋转
 //计算时针当前旋转的角度
 // angle = 当前多少时 * 每一小时旋转多少度
 CGFloat hourA = curHour * perHourA + curMin * perMinHour;

 self.hourL.transform = CATransform3DMakeRotation(angle2Rad(hourA), 0, 0, 1);
}
//添加秒针
- (void)setSec{

 CALayer *secL = [CALayer layer];
 secL.bounds = CGRectMake(0, 0, 1, 80);
 secL.backgroundColor = [UIColor redColor].CGColor;
 //绕着锚点旋转
 secL.anchorPoint = CGPointMake(0.5, 1);
 secL.position = CGPointMake(self.clockView.bounds.size.width * 0.5, self.clockView.bounds.size.height * 0.5);
 [self.clockView.layer addSublayer:secL];
 self.secL = secL;

}

//添加分针
- (void)setMin{

 CALayer *minL = [CALayer layer];
 minL.bounds = CGRectMake(0, 0, 3, 70);
 minL.cornerRadius = 1.5;
 minL.backgroundColor = [UIColor blackColor].CGColor;
 minL.anchorPoint = CGPointMake(0.5, 1);
 minL.position = CGPointMake(self.clockView.bounds.size.width * 0.5, self.clockView.bounds.size.height * 0.5);
 [self.clockView.layer addSublayer:minL];
 self.minL = minL;

}

//添加时针
- (void)setHour{

 CALayer *hourL = [CALayer layer];
 hourL.bounds = CGRectMake(0, 0, 3, 60);
 hourL.backgroundColor = [UIColor blackColor].CGColor;
 hourL.anchorPoint = CGPointMake(0.5, 1);
 hourL.position = CGPointMake(self.clockView.bounds.size.width * 0.5, self.clockView.bounds.size.height * 0.5);
 [self.clockView.layer addSublayer:hourL];
 self.hourL = hourL;

}
- (void)didReceiveMemoryWarning {
 [super didReceiveMemoryWarning];
 // Dispose of any resources that can be recreated.
}


@end

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • iOS发送短信功能的实现代码

    iOS发送短信功能的实现代码

    本篇文章主要介绍了iOS发送短信功能的实现代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • iOS NSTimer循环引用的办法

    iOS NSTimer循环引用的办法

    这篇文章主要介绍了iOS NSTimer循环引用的办法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • 详解iOS中Button按钮的状态和点击事件

    详解iOS中Button按钮的状态和点击事件

    这篇文章先是给大家介绍iOS中Button按钮的状态,而后又详细介绍了iOS中按钮点击事件处理方式,本文介绍的很详细,有需要的朋友们可以参考借鉴,下面来一起看看吧。
    2016-09-09
  • iOS ScrollView实现自动布局的方法(适用Swift 3.0 )

    iOS ScrollView实现自动布局的方法(适用Swift 3.0 )

    传说中有一个美工ios开发者在遇到这个问题的时候特意跑到苹果总部去咨询如何对scrollview进行自动布局。当然大家不用去了,下面这篇文章就来给大家介绍关于iOS ScrollView实现自动布局的方法,文中的语法同样也适用Swift 3.0 ,需要的朋友可以参考下。
    2017-12-12
  • iOS在固定的label上动态显示所有文字

    iOS在固定的label上动态显示所有文字

    这篇文章给大家主要介绍了iOS中如何实现,在固定的label上动态显示所有文字的方法,文中给出了示例和思路,对大家的理解很有帮助,感兴趣的朋友们下面来一起看看吧。
    2016-10-10
  • 利用iOS开发实现翻转扑克牌动画的方法

    利用iOS开发实现翻转扑克牌动画的方法

    这篇文章主要给大家介绍了关于利用iOS开发实现翻扑克牌动画的方法,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来跟着小编一起学习学习吧。
    2017-07-07
  • iOS开发中实现邮件和短信发送的简单示例

    iOS开发中实现邮件和短信发送的简单示例

    这篇文章主要介绍了iOS开发中实现邮件和短信发送的简单示例,编程语言依然是传统的Objective-C,需要的朋友可以参考下
    2015-09-09
  • iOS捕捉截屏事件并展示截图效果

    iOS捕捉截屏事件并展示截图效果

    这篇文章主要为大家详细介绍了iOS捕捉截屏事件并展示截图效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • 详解iOS App设计模式开发中对于享元模式的运用

    详解iOS App设计模式开发中对于享元模式的运用

    这篇文章主要介绍了iOS App设计模式开发中对于享元模式的运用,示例代码为传统的Objective-C,需要的朋友可以参考下
    2016-04-04
  • iOS渐变圆环旋转动画CAShapeLayer CAGradientLayer

    iOS渐变圆环旋转动画CAShapeLayer CAGradientLayer

    这篇文章主要介绍了iOS渐变圆环旋转动画CAShapeLayer CAGradientLayer的相关资料,需要的朋友可以参考下
    2016-09-09

最新评论