美文网首页iOS技术资料
一个时钟的小demo(iOS)

一个时钟的小demo(iOS)

作者: 重驹 | 来源:发表于2017-03-27 17:17 被阅读0次

先看下效果(请忽略图片的丑陋)

钟.gif

这个demo很简单,主要有三点比较重要:
1.根据当前时间计算时分秒偏转角度,并且处理旋转的动画,很简单的一个旋转动画transform

- (void)tick{
// NSCalendarIdentifierGregorian : 指定日历的算法
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
// NSDateComponents封装了日期的组件,年月日时分秒等(个人感觉像是平时用的model模型)
// 调用NSCalendar的components:fromDate:方法返回一个NSDateComponents对象
// 需要的参数分别components:所需要的日期单位 date:目标月份的date对象
// NSUInteger units = NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;//所需要日期单位
NSDateComponents *components = [calendar components:NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond fromDate:[NSDate date]];
//时钟偏转角度
CGFloat hoursAngle = (components.hour / 12.0) * M_PI * 2.0;
//分钟偏转角度
CGFloat minsAngle = (components.minute / 60.0) * M_PI * 2.0;
//秒钟旋转角度
CGFloat secsAngle = (components.second / 60.0) * M_PI * 2.0;
self.hourHand.transform = CGAffineTransformMakeRotation(hoursAngle);
self.minuteHand.transform = CGAffineTransformMakeRotation(minsAngle);
self.secondHand.transform = CGAffineTransformMakeRotation(secsAngle);

}

2.NSTimer定时器,重复秒针旋转动画

self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(tick) userInfo:nil repeats:YES];

3.设置时分秒图片layer的position位置(anchorPoint锚点位置)

  self.secondHand.layer.anchorPoint = CGPointMake(0.5f, 0.9f);
self.minuteHand.layer.anchorPoint = CGPointMake(0.5f, 0.9f);
self.hourHand.layer.anchorPoint = CGPointMake(0.5f, 0.9f);

补充:锚点解释如下图:

锚点.png

下面是所有代码,控件是通过storyboard控件拉的。

storyboard控件.png
#import "ViewController.h"

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIImageView *hourHand;
@property (weak, nonatomic) IBOutlet UIImageView *minuteHand;
@property (weak, nonatomic) IBOutlet UIImageView *secondHand;

@property (weak, nonatomic) NSTimer *timer;
@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];

self.secondHand.layer.anchorPoint = CGPointMake(0.5f, 0.9f);
self.minuteHand.layer.anchorPoint = CGPointMake(0.5f, 0.9f);
self.hourHand.layer.anchorPoint = CGPointMake(0.5f, 0.9f);


self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(tick) userInfo:nil repeats:YES];
[self tick];
}

- (void)tick{
// NSCalendarIdentifierGregorian : 指定日历的算法
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
// NSDateComponents封装了日期的组件,年月日时分秒等(个人感觉像是平时用的model模型)
// 调用NSCalendar的components:fromDate:方法返回一个NSDateComponents对象
// 需要的参数分别components:所需要的日期单位 date:目标月份的date对象
// NSUInteger units = NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;//所需要日期单位
NSDateComponents *components = [calendar components:NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond fromDate:[NSDate date]];
//时钟偏转角度
CGFloat hoursAngle = (components.hour / 12.0) * M_PI * 2.0;
//分钟偏转角度
CGFloat minsAngle = (components.minute / 60.0) * M_PI * 2.0;
//秒钟旋转角度
CGFloat secsAngle = (components.second / 60.0) * M_PI * 2.0;
self.hourHand.transform = CGAffineTransformMakeRotation(hoursAngle);
self.minuteHand.transform = CGAffineTransformMakeRotation(minsAngle);
self.secondHand.transform = CGAffineTransformMakeRotation(secsAngle);
}

源码下载地址:https://github.com/marsLiuFei/mytimelock

相关文章

  • 一个时钟的小demo(iOS)

    先看下效果(请忽略图片的丑陋) 这个demo很简单,主要有三点比较重要:1.根据当前时间计算时分秒偏转角度,并且处...

  • ios.时钟demo

    CALayer做时钟demo 首先: 一定要搞明白 position 和 anchorPoint 这一点非常重要 ...

  • 小程序demo(Canvas时钟)

    效果图如下: wxml文件 wxss文件 json文件(可以为空下面设置的是标题) js文件

  • iOS 14 widget(时钟、日历)

    github demo 附在结尾 本文主要介绍iOS14 widget开发,自定义时钟、日历,app中切换widg...

  • iOS iPad开发~demo

    iOS iPad开发~demo iOS iPad开发~demo

  • iOS第三方库(5)

    版本新API的Demo • appleSample - iOS 苹果官方Demo合集, 官方demo. • iOS...

  • iOS-Demo相关

    Demo文集涵盖实用性Demo、外加高仿程序. 1.iOS之选择汽车品牌小demo2.个人demo仿斗鱼、喵播、自...

  • iOS开源项目集合(三)

    版本新API的Demo appleSample- iOS 苹果官方Demo合集,官方demo. iOS7-Samp...

  • 一个基于Vue的时钟demo

    前两天写了一个基于vue的小钟表,给大家分享一下。 其中时针和分针使用的是图片,结合transform制作;表盘刻...

  • 13.1.4 画时钟

    13.1.4 画时钟 demo.html test.php

网友评论

    本文标题:一个时钟的小demo(iOS)

    本文链接:https://www.haomeiwen.com/subject/ihmrottx.html