iOS时钟开发案例分享

本文实例为大家介绍了iOS时钟开发过程,供大家参考,具体内容如下

思路就是利用CALayer的隐式动画来实现。因为UIView的非根层也就是手动创建的layer在其属性发生变化时会默认会产生动画效果,这些属性也叫作可动画属性。比如bounds、backgroundColor、position。

时钟里面表盘就是一个UIView,而三根针就是三个手动创建的layer。

先在storyboard上弄一个UIImageView,设置表盘图片

iOS时钟开发案例分享

然后在viewDidLoad中初始化三根针,并设置定时器,获取当前时间,将当前时间对应的时针分针秒针分别指向对应的角度。

//
// ViewController.m
// 时钟效果
//
// Created by Daniel on 16/4/7.
// Copyright © 2016年 Daniel. All rights reserved.
//

#define kClockWH _clockView.bounds.size.width

//一秒钟秒针转多少度
#define preSecondA 6

//一分钟分针转多少度
#define preMinuteA 6

//一小时时针转多少度
#define preHourA 30

//每分钟时针转多少度
#define preHourMinute 0.5

//每秒钟分针转多少度
#define preMinuteSecond 0.1

#define angle2raditon(a) ((a) / 180.0 * M_PI)

#import "ViewController.h"

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIImageView *clockView;

/** 秒针 */
@property(nonatomic, strong) CALayer *secondL;

/** 分针 */
@property(nonatomic, strong) CALayer *minuteL;

/** 时针 */
@property(nonatomic, strong) CALayer *hourL;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];

  //添加时针
  [self setUpHourLayer];

  //添加分针
  [self setUpMinuteLayer];

  //添加秒针
  [self setUpSecondLayer];

  //添加定时器
  [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timeChange) userInfo:nil repeats:YES];

  //开始运行时就获取时间,这样在启动时就不会有停顿的感觉
  [self timeChange];

}

- (void)timeChange {

  //获取当前系统时间
  NSCalendar *calendar = [NSCalendar currentCalendar];

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

  //获取秒
  NSInteger second = cmp.second;

  //获取分
  NSInteger minute = cmp.minute;

  //获取小时
  NSInteger hour = cmp.hour;

  //计算秒针转多少度
  CGFloat secondA = second * preSecondA;

  //计算分针转多少度
  CGFloat minuteA = minute * preMinuteA + second * preMinuteSecond;

  //计算时针转多少度
  CGFloat hourA = hour * preHourA + minute * preHourMinute;

  //旋转秒针
  _secondL.transform = CATransform3DMakeRotation(angle2raditon(secondA), 0, 0, 1);

  //旋转分针
  _minuteL.transform = CATransform3DMakeRotation(angle2raditon(minuteA), 0, 0, 1);

  //旋转时针
  _hourL.transform = CATransform3DMakeRotation(angle2raditon(hourA), 0, 0, 1);

}

#pragma mark - 初始化时针
- (void)setUpHourLayer {

  CALayer *hourL = [CALayer layer];

  //设置秒针背景色
  hourL.backgroundColor = [UIColor blackColor].CGColor;

  //设置秒针锚点
  hourL.anchorPoint = CGPointMake(0.5, 1);

  //设置秒针锚点在父控件的位置
  hourL.position = CGPointMake(kClockWH * 0.5, kClockWH * 0.5);

  hourL.cornerRadius = 4;

  //设置秒针bounds
  hourL.bounds = CGRectMake(0, 0, 4, kClockWH * 0.5 - 40);

  //把秒针添加到clockView图层上
  [_clockView.layer addSublayer:hourL];

  _hourL = hourL;

}

#pragma mark - 初始化分针
- (void)setUpMinuteLayer {

  CALayer *minuteL = [CALayer layer];

  //设置秒针背景色
  minuteL.backgroundColor = [UIColor blackColor].CGColor;

  //设置秒针锚点
  minuteL.anchorPoint = CGPointMake(0.5, 1);

  //设置秒针锚点在父控件的位置
  minuteL.position = CGPointMake(kClockWH * 0.5, kClockWH * 0.5);

  minuteL.cornerRadius = 4;

  //设置秒针bounds
  minuteL.bounds = CGRectMake(0, 0, 4, kClockWH * 0.5 - 20);

  //把秒针添加到clockView图层上
  [_clockView.layer addSublayer:minuteL];

  _minuteL = minuteL;

}

#pragma mark - 初始化秒针
- (void)setUpSecondLayer {

  CALayer *secondL = [CALayer layer];

  //设置秒针背景色
  secondL.backgroundColor = [UIColor redColor].CGColor;

  //设置秒针锚点
  secondL.anchorPoint = CGPointMake(0.5, 1);

  //设置秒针锚点在父控件的位置
  secondL.position = CGPointMake(kClockWH * 0.5, kClockWH * 0.5);

  //设置秒针bounds
  secondL.bounds = CGRectMake(0, 0, 1.5, kClockWH * 0.5 - 20);

  //把秒针添加到clockView图层上
  [_clockView.layer addSublayer:secondL];

  _secondL = secondL;

}

@end

效果图:

iOS时钟开发案例分享

以上就是本文的全部内容,希望对大家学习IOS程序设计有所帮助。

时间: 2016-04-05

简单讲解iOS应用开发中的MD5加密的相关使用

一.简单说明 1.说明 在开发应用的时候,数据的安全性至关重要,而仅仅用POST请求提交用户的隐私数据,还是不能完全解决安全问题. 如:可以利用软件(比如Charles)设置代理服务器,拦截查看手机的请求数据 "青花瓷"软件 因此:提交用户的隐私数据时,一定不要明文提交,要加密处理后再提交 2.常见的加密算法 MD5 \ SHA \ DES \ 3DES \ RC2和RC4 \ RSA \ IDEA \ DSA \ AES 3.加密算法的选择 一般公司都会有一套自己的加密方案,按照公司

iOS应用开发中导航栏按钮UIBarButtonItem的添加教程

1.UINavigationController导航控制器如何使用 UINavigationController可以翻译为导航控制器,在iOS里经常用到. 我们看看它的如何使用: 下面的图显示了导航控制器的流程.最左侧是根视图,当用户点击其中的General项时 ,General视图会滑入屏幕:当用户继续点击Auto-Lock项时,Auto-Lock视图将滑入屏幕.相应地,在对象管理上,导航控制器使用了导航堆栈.根视图控制器在堆栈最底层,接下来入栈的是General视图控制器和Auto-Lock

IOS中快速集成短信SDK验证开发(SMSSDK),IOS开发中如何设置手机短信验证码

嘿嘿..sdk是别人的,我只是下载来集成一下. smssdk下载网站:http://www.mob.com/(也有其他很多网站有类似SDK,譬如https://www.juhe.cn/等等,可以自行百度,我在这里就演示一下MOB官网的) 此网站号称smssdk免费,可是进去一看........ 每天免费20条,上限登记了才永久免费.不多说了,开始...... 官网集成文档http://wiki.mob.com/ [1~3步]我就截图官方文档了,傻瓜式操作 [4.1]:先看官网说明: [4.2]再

iOS开发中UIDatePicker控件的使用方法简介

iOS上的选择时间日期的控件是这样的,左边是时间和日期混合,右边是单纯的日期模式. 您可以选择自己需要的模式,Time, Date,Date and Time  , Count Down Timer四种模式. 本篇文章简单介绍下PickerDate控件的使用 1.新建一个Singe View Application,命名为DatePickDemo,其他设置如图 2.放置控件 打开ViewController.xib,拖拽一个DatePicker控件放到界面上,再拖拽一个Button控件放到界面上

iOS应用开发中实现页面跳转的简单方法笔记

作为新手写的笔记,方便自己记忆: 从android转过来iOS的,对于页面的跳转,找了很多资料,现在记录一下页面跳转的方法. 1.用navigationController 2.直接跳(刚刚在网上找到的,不太熟,有错莫怪) 1.建一个RootViewController,在delegate.h 复制代码 代码如下: @property (strong, nonatomic) UIViewController *viewController; @property (strong, nonatomi

iOS开发中音频工具类的封装以及音乐播放器的细节控制

一.控制器间数据传递 两个控制器之间数据的传递 第一种方法: 复制代码 代码如下: self.parentViewController.music=self.music[indexPath.row]; 不能满足 第二种做法:把整个数组传递给它 第三种做法:设置一个数据源,设置播放控制器的数据源是这个控制器.self.parentViewController.dataSource=self;好处:没有耦合性,任何实现了协议的可以作为数据源. 第四种做法:把整个项目会使用到的音频资源交给一个工具类去

iOS开发中使用UIScrollView实现图片轮播和点击加载

UIScrollView控件实现图片轮播 一.实现效果 实现图片的自动轮播 二.实现代码 storyboard中布局 代码: 复制代码 代码如下: #import "YYViewController.h" @interface YYViewController () <UIScrollViewDelegate> @property (weak, nonatomic) IBOutlet UIScrollView *scrollview; /**  *  页码  */ @pro

iOS开发中导航控制器的基本使用教程

多控制器和导航控制器简单介绍 一.多控制器 一个iOS的app很少只由一个控制器组成,除非这个app极其简单.当app中有多个控制器的时候,我们就需要对这些控制器进行管理 有多个view时,可以用一个大的view去管理1个或者多个小view,控制器也是如此,用1个控制器去管理其他多个控制器 比如,用一个控制器A去管理3个控制器B.C.D.控制器A被称为控制器B.C.D的"父控制器":控制器B.C.D的被称为控制器A的"子控制器" 为了便于管理控制器,iOS提供了2个

iOS开发中使用UILabel设置字体的相关技巧小结

一.初始化 复制代码 代码如下: UILabel *myLabel = [[UILabel alloc] initWithFrame:CGRectMake(40, 40, 120, 44)];      [self.view addSubview:myLabel]; 二.设置文字 1.设置默认文本 复制代码 代码如下: NSString *text = @"标签文本"; myLabel.text = text; 效果: 2.设置标签文本(此属性是iOS6.0之后才出现,如若不是必要,不

iOS开发中WebView的基本使用方法简介

1.使用UIWebView加载网页 运行XCode 4.3,新建一个Single View Application,命名为WebViewDemo. 2.加载WebView 在ViewController.h添加WebView成员变量和在ViewController.m添加实现 复制代码 代码如下: #import <UIKit/UIKit.h> @interface ViewController : UIViewController {     UIWebView *webView; } @e

iOS开发中UISwitch按钮的使用方法简介

一.第一种创建UISwitch控件的方法,在代码中动态创建. 1.打开Xcode  4.3.2, 新建项目Switch,选择Single View Application. 2.打开ViewController.m文件在viewDidLoad方法里添加代码: 复制代码 代码如下: - (void)viewDidLoad {     [super viewDidLoad];     UISwitch *switchButton = [[UISwitch alloc] initWithFrame:C

IOS开发中加载大量网络图片优化方法

IOS开发中加载大量网络图片如何优化 1.概述 在IOS下通过URL读一张网络图片并不像其他编程语言那样可以直接把图片路径放到图片路径的位置就ok,而是需要我们通过一段类似流的方式去加载网络图片,接着才能把图片放入图片路径显示.比如: -(UIImage *) getImageFromURL:(NSString *)fileURL { //NSLog(@"执行图片下载函数"); UIImage * result; NSData * data = [NSData dataWithCont

IOS开发中键盘输入屏幕上移的解决方法

在IOS开法中经常会遇到键盘遮挡屏幕的事情(比如输入账号密码验证码等等),就使得原本都不大的屏幕直接占了一半甚至更多的位置,这倒无所谓,关键是挡住了下面的按钮.这样的话按钮的事件也就触发不了,最好的解决办法就是当输入这些信息的时候让整个屏幕上移一个键盘的位置,或者上移到指定的位置. 首先一般输入的话都用的是UITextField,所以要监听用户什么时候开始输入和什么时候结束输入,直接设置代理代理就行了,要遵受 UITextFieldDelegate协议. //遵循协议 @interface Vi

iOS开发中Swift3 监听UITextView文字改变的方法(三种方法)

在项目中使用文本输入框出UITextField之外还会经常使用 UITextView ,难免会有需求监听UITextView文本框内文本数量.下面介绍在swift3中两种常用方式 方式一: 全局通知 1.注册通知 在合适位置注册监听UITextView文本变化的全局通知 //UITextView 监听开始输入的两种方法 //方法一:通知 NotificationCenter.default.addObserver(self, selector: #selector(ComposeVC.textV

iOS开发中使用CoreLocation框架处理地理编码的方法

一.简介 1.在移动互联网时代,移动app能解决用户的很多生活琐事,比如 (1)导航:去任意陌生的地方 (2)周边:找餐馆.找酒店.找银行.找电影院 2.在上述应用中,都用到了地图和定位功能,在iOS开发中,要想加入这2大功能,必须基于2个框架进行开发 (1)Map Kit :用于地图展示 (2)Core Location :用于地理定位 3.两个热门专业术语 (1)LBS :Location Based Service(基于定位的服务) (2)SoLoMo :Social Local Mobi

轻松理解iOS 11中webview的视口

iOS 11在状态栏区域带来了一些新的,也许是不直观的行为,这对使用Apache Cordova或Ionic等工具的开发人员尤为重要.尤其是这种行为变化会影响到任何基于Web的应用程序,这些应用程序在进行iOS 11构建时使用fixed定位标题栏.此文章可帮助您了解iOS 11中的Webview视口. 注意:现有应用程序将继续工作,因为它们始终可以对其视口行为进行更改.这只会影响使用Xcode 9和iOS 11的目标编译的应用程序. 要了解这些变化,我们需要看看它的历史. 状态栏与安全区 在早起

iOS开发中使用UIWebView 屏蔽 alert警告框

如果是网页内容里面的alert,我们可以等网页加载完毕,也就是在webViewDidFinishLoad中执行下面的js代码,就可以屏蔽alert了 [myWebView stringByEvaluatingJavaScriptFromString:@"window.alert=null;"]; 但上面的方法对于网页onLoad事件里面的alert就不起作用了 解决方法就是给UIWebView添加一个类别: 给工程添加JavaScriptAlert.h @interface UIWeb

详解IOS开发中生成推送的pem文件

详解IOS开发中生成推送的pem文件 具体步骤如下: 首先,需要一个pem的证书,该证书需要与开发时签名用的一致. 具体生成pem证书方法如下: 1. 登录到 iPhone Developer Connection Portal(http://developer.apple.com/iphone/manage/overview/index.action )并点击 App IDs 2. 创建一个不使用通配符的 App ID .通配符 ID 不能用于推送通知服务.例如,  com.itotem.ip

iOS开发中AVPlayer的简单应用

前言 在iOS开发中,播放视频通常有两种方式,一种是使用MPMoviePlayerController(需要导入MediaPlayer.Framework),还有一种是使用AVPlayer.关于这两个类的区别简而言之就是MPMoviePlayerController使用更简单,功能不如AVPlayer强大,而AVPlayer使用稍微麻烦点,不过功能更加强大.下面这篇文章主要介绍下AVPlayer的简单应用,需要的朋友们一起来看看吧. AVPlayer的简单应用 1.引入系统框架 2.创建视频的u