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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章