您的位置:首页 > 其它

时钟

2015-07-14 15:21 169 查看
#import "ViewController.h"

@interface
ViewController ()
{

UIImageView *_clockView;

CGFloat _clockWidth;

CGFloat _clockHeight;

CALayer *_secondLayer;

CALayer *_minuteLayer;

CALayer *_hourLayer;
}

@end

@implementation ViewController

- (void)viewDidLoad {

[super
viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

//添加_clockView

[self
addBlockView];

//添加一个大圆点的layer

[self
addPointLayer];

//添加分针_minuteLayer

[self
addMinuteLayer];

//添加时针_hourLayer

[self
addHourLayer];

//添加秒针_secondLayer

[self
addSecondLayer];

//定时器
每个一秒调用一次update方法

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

//作用:去除1秒延迟产生的bug
[self
update];
}

//添加表盘_clockView
- (void)addBlockView
{

UIImage *image = [UIImage
imageNamed:@"clock.png"];

_clockWidth = image.size.width;

_clockHeight = image.size.height;

_clockView = [[UIImageView
alloc]
initWithFrame:CGRectMake(0,
0, _clockWidth,
_clockHeight)];

[_clockView
setBackgroundColor:[UIColor
yellowColor]];

_clockView.center =
self.view.center;
[_clockView
setImage:image];
[self.view
addSubview:_clockView];
}

//添加一个大圆点的layer
- (void)addPointLayer
{

CALayer *pointLayer = [[CALayer
alloc] init];
pointLayer.bounds =
CGRectMake(0,
0, 10,
10);
pointLayer.position =
CGPointMake(_clockWidth/2,
_clockHeight/2);
pointLayer.cornerRadius =
5;
pointLayer.backgroundColor = [UIColor
blackColor].CGColor;
[_clockView.layer
addSublayer:pointLayer];
}

//添加秒针_secondLayer
- (void)addSecondLayer
{

//初始化秒针

_secondLayer = [[CALayer
alloc] init];

_secondLayer.bounds =
CGRectMake(0,
0, 2,
100);

_secondLayer.anchorPoint =
CGPointMake(0.5,
0.8);

_secondLayer.position =
CGPointMake(_clockWidth/2,
_clockHeight/2);

[_secondLayer
setBackgroundColor:[UIColor
redColor].CGColor];

[_clockView.layer
addSublayer:_secondLayer];
}

//添加分针_minuteLayer
- (void)addMinuteLayer
{

//初始化分针

_minuteLayer = [[CALayer
alloc] init];

_minuteLayer.bounds =
CGRectMake(0,
0, 4,
80);

_minuteLayer.cornerRadius =
2;

_minuteLayer.anchorPoint =
CGPointMake(0.5,
1);

_minuteLayer.position =
CGPointMake(_clockWidth/2,
_clockHeight/2);

[_minuteLayer
setBackgroundColor:[UIColor
blackColor].CGColor];

[_clockView.layer
addSublayer:_minuteLayer];
}

//添加时针_hourLayer
- (void)addHourLayer
{

//初始化时针

_hourLayer = [[CALayer
alloc] init];

_hourLayer.bounds =
CGRectMake(0,
0, 5,
60);

_hourLayer.cornerRadius =
2.5;

_hourLayer.anchorPoint =
CGPointMake(0.5,
1);

_hourLayer.position =
CGPointMake(_clockWidth/2,
_clockHeight/2);

[_hourLayer
setBackgroundColor:[UIColor
blackColor].CGColor];

[_clockView.layer
addSublayer:_hourLayer];
}

//更新
- (void)update
{

NSLog(@"-----update %@",[NSThread
currentThread]);

//每秒钟
秒针走的弧度

CGFloat perSecondAngle =
M_PI*2/60;

//每分钟
分针走的弧度

CGFloat perMinuteAngle =
M_PI*2/60;

//每秒钟
分针走的弧度

CGFloat perSecondMinuteAngle = perMinuteAngle/60;

//每小时
时针走的弧度

CGFloat perHourAngle =
M_PI*2/12;

//每分钟
时针走的弧度

CGFloat perMinuteHourAngle = perHourAngle/60;

//日历

NSCalendar *calendar = [NSCalendar
currentCalendar];

//获取日历组件

NSDateComponents *components = [calendar
components:NSCalendarUnitSecond|NSCalendarUnitMinute|NSCalendarUnitHour
fromDate:[NSDate
date]];

//获取当前的秒

CGFloat second = components.second;

//获取当前的分钟

CGFloat minute = components.minute;

//获取当前的小时

CGFloat hour = components.hour;

//当前时间
秒针走过的弧度

CGFloat secondAngle = second * perSecondAngle;

//当前时间
分针走过的弧度 = 当前分钟 *
每分钟分针走的弧度 + 当前秒 *
每秒钟分针走的弧度

CGFloat minuteAngle = minute * perMinuteAngle + second * perSecondMinuteAngle;

//当前时间
时针走过的弧度 = 当前小时 *
每小时时针走的弧度 + 当前分钟 *
每分钟时针走的弧度

CGFloat hourAngle = hour * perHourAngle + minute * perMinuteHourAngle;

//秒针旋转到
当前弧度

_secondLayer.transform =
CATransform3DMakeRotation(secondAngle,
0, 0, 1);

//分针旋转到
当前弧度

_minuteLayer.transform =
CATransform3DMakeRotation(minuteAngle,
0, 0, 1);

//时针旋转到
当前弧度

_hourLayer.transform =
CATransform3DMakeRotation(hourAngle,
0, 0, 1);
}

- (void)didReceiveMemoryWarning {

[super
didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.
}

@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: