时钟动画制作

//  CZViewController.m
//  04-定位点动画(时钟动画)
//
//  Created by apple on 16/07/14.
//  Copyright (c) 2014itcast. All rights reserved.
//

效果图
 
#import "CZViewController.h"

@interface CZViewController ()
// 钟表
@property (nonatomic,strong) UIView *clockView;
// 秒针
@property (nonatomic,strong) UIView *secondView;
// 分针
@property (nonatomic,strong) UIView *minuteView;
// 时针
@property (nonatomic,strong) UIView *hourView;
// 固定的钉
@property (nonatomic,strong) UIView *nailView;
@end

@implementation CZViewController
/**
 1.
画钟表
 2.
画秒针
 3.
时钟动画让秒针旋转
 */


//懒加载创建表盘
- (UIView *)clockView
{
    if (_clockView ==nil) {
        //实例化表盘
        _clockView = [[UIViewalloc] initWithFrame:CGRectMake(60,100, 200, 200)];
        //设置表盘背景图片
        _clockView.backgroundColor = [UIColorcolorWithPatternImage:[UIImageimageNamed:@"42d75fd82eafc032a86bfd4eff1cd4bc"]];
        //设置表盘图层圆角半径
        _clockView.layer.cornerRadius =100;
        //设置表盘图层边线
        _clockView.layer.borderColor = [UIColordarkGrayColor].CGColor;
        //边框的宽
        _clockView.layer.borderWidth =3.0;
       
        // 秒针
        _secondView = [[UIViewalloc] initWithFrame:CGRectMake(0,0, 2.0,100.0)];
//        _secondView.center = CGPointMake(100, 55);
        // center本质上就是layerposition
        _secondView.center =CGPointMake(100,100);//中心点
        _secondView.layer.anchorPoint =CGPointMake(0.5,0.75);//定位点
        _secondView.backgroundColor = [UIColorredColor];//颜色
       
        // 分针
        _minuteView = [[UIViewalloc] initWithFrame:CGRectMake(0,0, 4.0,80.0)];
        //        _secondView.center = CGPointMake(100, 55);
        // center本质上就是layerposition
        _minuteView.center =CGPointMake(100,100);
        _minuteView.layer.anchorPoint =CGPointMake(0.5,0.85);
        _minuteView.backgroundColor = [UIColorblackColor];
        _hourView = [[UIViewalloc] initWithFrame:CGRectMake(0,0, 6.0,60.0)];
        //        _secondView.center = CGPointMake(100, 55);
       
        //时针
        // center本质上就是layerposition
        _hourView.center =CGPointMake(100,100);
        _hourView.layer.anchorPoint =CGPointMake(0.5,0.9);
        _hourView.backgroundColor = [UIColorblackColor];
       
        //实例化钉
        _nailView = [[UIViewalloc] initWithFrame:CGRectMake(0,0, 6,6)];
        //中心点
        _nailView.center =_hourView.center;
        //背景颜色
        _nailView.backgroundColor = [UIColoryellowColor];
        //设置钉圆角半径
        _nailView.layer.cornerRadius =3;
        //设置钉边线
        _nailView.layer.borderColor = [UIColororangeColor].CGColor;
        //边框的宽
        _nailView.layer.borderWidth =1.0;
        //把三个针添加到表盘上
        [_clockView addSubview:_hourView];
        [_clockView addSubview:_minuteView];
        [_clockView addSubview:_secondView];
        [_clockView addSubview:_nailView];
        //把表盘添加到view
        [self.viewaddSubview:_clockView];
    }
    return _clockView;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    //设置背景颜色
    self.view.backgroundColor = [UIColorlightGrayColor];
    [self clockView];
   
    // 秒针旋转
//    self.secondView.transform = CGAffineTransformMakeRotation(M_PI_2);
    // 时钟动画,定时器
   // [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateTimer) userInfo:nil repeats:YES];
   
    //CADisplayLink也是一个定时器用于刷新
   
    //声明一个定时器
    // link默认是1/60秒执行一次
    CADisplayLink *link = [CADisplayLinkdisplayLinkWithTarget:selfselector:@selector(updateTimer)];
   //执行定时器把定时器放在主运行循环中执行
    [link addToRunLoop:[NSRunLoopmainRunLoop] forMode:NSDefaultRunLoopMode];
}

#define degree2angle(angle)     ((angle) * M_PI /180)
- (void)updateTimer
{
  //  NSLog(@"%s", __func__);
   
    // 实例化日历对象
    NSCalendar *calendar = [NSCalendarcurrentCalendar];
   
    // 获取当前时间的秒数
    NSDateComponents *comps = [calendarcomponents:NSCalendarUnitSecondfromDate:[NSDatedate]];
    // 获取当前时间的分钟数
    NSDateComponents *minute = [calendarcomponents:NSCalendarUnitMinutefromDate:[NSDatedate]];
    // 获取当前时间的分钟数
    NSDateComponents *hour = [calendarcomponents:NSCalendarUnitHourfromDate:[NSDatedate]];
   // NSLog(@"%.2f", 10/0.3);
   
    // 设置秒针的旋转
    CGFloat angle = degree2angle(comps.second * 360 / 60);
    self.secondView.transform =CGAffineTransformMakeRotation(angle);
    // 设置分针的旋转
    CGFloat angleM = degree2angle(minute.minute * 360 / 60);
    self.minuteView.transform =CGAffineTransformMakeRotation(angleM);
    // 设置时针的旋转
    CGFloat angleH = degree2angle(hour.hour*30 + minute.minute/10.0 *5);
    self.hourView.transform =CGAffineTransformMakeRotation(angleH);
   // (hour*30) + (minutes/10)*6
}

@end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值