用swift开发仪表盘控件(二)
二、代码分析
这个控件本质就是从UIView继承的一个类而已。所以整个代码事实上就是一个定制的UIView类。
依据UIView的规则进行例如以下初始化:
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override init(frame: CGRect) {
self.pointer = UIImageView(image: UIImage(named:"pointer2.png"))
self.gaugeView = UIImage(named: "gaugeback.png")
self.frameCurr = frame
self.gv = GaugeParam(frame: frame)
super.init(frame: frame)
self.setFrameInit(frame)
}
构造函数没啥好说的。解释一下required init。假设继承了init(),就必须实现Required Initializers。
为了初始化类的參数设计了一个结构
struct GaugeParam{
var maxNum: Float = MAXVALUE
var minNum: Float = 0.00
var maxAngle: Float = MAXOFFSETANGLE
var minAngle: Float = -MAXOFFSETANGLE
var gaugeValue: Float = 0.00
var gaugeAngle: Float = -MAXOFFSETANGLE
var frame: CGRect
var angleperValue: Float{
get{
return (self.maxAngle - self.minAngle)/(self.maxNum- self.minNum)
}
}
var scaleNum: Float{
get{
return (Float(DEFLUATSIZE)/Float(self.frame.size.width))
}
}
init(frame:CGRect){
self.frame = frame
}
}
上面这个结构体挺简单的,没啥好解释的。
以下是重头戏了,GaugePanel是主类。全部操作都是在当中完毕的。
代码结构例如以下:
个别算法解释一下(老鸟请绕行):
func parseToX(radius: CGFloat,angle: CGFloat) -> CGFloat{
let temp = self.transToRadian(angle)
return radius*cos(temp)
}
初中平面几何的知识,知道半径和角度求X和Y坐标。
对pointToAngle(duration: CGFloat,angle: CGFloat)中的代码进行一下解释:
CATransform3DRotate(CATransform3DIdentity,self.transToRadian(CGFloat(gv.gaugeAngle) + distance*CGFloat(i)), 0, 0, 1)
这个是产生一个3D旋转,由于是平面旋转所以是环绕Z轴进行的,最后一个參数设置为1,self.transToRadian(CGFloat(gv.gaugeAngle)+ distance*CGFloat(i))是计算出一系列的角度。
values.addObject(NSValue(CATransform3D:v)),事实上CATransform3DRotate并不会马上产生旋转,而是加入到一个NSMutableArray数组中,NSMutableArray的元素不是AnyObject,须要用NSValue函数包装一下,真正发生旋转是在pointer.layer.addAnimation(ani,forKey: "any")进行的,ani包括了Values的内容。
override func drawRect(rect: CGRect)这个函数并没有显式的调用,是在containView.addSubview(panel)的时候被自己主动触发的。
好了。我要歇息了。希望这偏文章给swift的刚開始学习的人(事实上大家都是刚開始学习的人。老鸟也就是几个月的经验)有所帮助。对这个控件的谬误之处和改进意见能够和我联系.QQ:脐林 32819362。
用swift开发仪表盘控件(二)的更多相关文章
- 用swift开发仪表盘控件(一)
苹果swift刚刚推出不久,接触到这个语言是一个偶然的机会,无聊之余随便看了下它的语法: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveW5tYW95b2 ...
- .Net语言 APP开发平台——Smobiler学习日志:如何在手机上开发仪表盘控件
最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便 一.目标样式 我们要实现上图中的效果,需要如下的操作: 1.从工具栏上的"S ...
- 用C#开发ActiveX控件,并使用web调用
入职差不多两个月了,由学生慢慢向职场人做转变,也慢慢的积累知识,不断的更新自己.最近的一个项目里边,涉及到的一些问题,因为SDK提供的只是winform才能使用了,但是有需求咱们必须得完成啊,所以涉及 ...
- 使用C#开发ActiveX控件(新)
前言 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序功能,以增强浏览器端的动态处理能力.通常ActiveX控件都是 ...
- 使用C#开发ActiveX控件(新) 转 http://www.cnblogs.com/yilin/p/csharp-activex.html
前言 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序功能,以增强浏览器端的动态处理能力.通常ActiveX控件都是 ...
- [转] 使用C#开发ActiveX控件
双魂人生 原文 使用C#开发ActiveX控件 ActiveX 是一个开放的集成平台,为开发人员.用户和 Web生产商提供了一个快速而简便的在 Internet 和 Intranet 创建程序集成和内 ...
- 使用C#开发ActiveX控件 11
C#开发ActiveX控件 ActiveX 是一个开放的集成平台,为开发人员.用户和 Web生产商提供了一个快速而简便的在 Internet 和 Intranet 创建程序集成和内容的方法. 使用 ...
- 使用C#开发ActiveX控件
使用C#开发ActiveX控件(新) 前言 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序功能,以增强浏览器端的动 ...
- 使用C#开发ActiveX控件[new]
文章出处:http://www.cnblogs.com/yilin/p/csharp-activex.html 前言 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以 ...
随机推荐
- windows10 Sqlserver卸载 指定账户不存在
在windows卸载程序时,有时会出现因提示“指定的账户不存在”而无法删除,如下: 这时时候要先选择要删除的项目,进行修复后再进行删除就可以正常删除了
- -bash: ./xxx.sh: /bin/bash^M: bad interpreter: No such file or directory
问题的原因是在windows下编辑然后上传到linux系统里执行的..sh文件的格式为dos格式.而linux只能执行格式为unix格式的脚本. 不要使用记事本编辑,使用代码编辑器可以正常执行
- (转)Apache的安装与配置
转自:http://www.dreamdu.com/webbuild/apache/ 5.2. Apache的安装与配置 5.2.1. Apache安装与配置视频教程 下面将介绍如何在WinXP下安装 ...
- oracle的常规操作(基本命令)
Oracle基本命令 前言:... 3 连接数据库:... 3 使用sql*plus连接oracle. 3 命令方式... 3 文件操作命令... 3 显示和设置环境变量... 3 查看当前所有表.. ...
- 数据库选型之MySQL(多线程并发)
刘勇 Email: lyssym@sina.com 本博客记录作者在工作与研究中所经历的点滴,一方面给自己的工作与生活留下印记,另一方面若是能对大家有所帮助,则幸甚至哉矣! 简介 鉴于高频中心库 ...
- Eclipse默认编码格式设置方式
看图即可 STEP ONE: STEP TWO: STEP THREE: STEP FOUR: 项目右击——>Properties 参阅: eclipse编码格式设置 - AlanLee(Jav ...
- Ubuntu分区方案归总
更新时间:2010-8-26 一.各文件及文件夹的定义 /bin:bin是binary(二进制)的缩写.存放必要的命令 存放增加的用户程序. /bin分区,存放标准系统实用程序. /boot: ...
- 一个月入门Python爬虫,轻松爬取大规模数据
Python爬虫为什么受欢迎 如果你仔细观察,就不难发现,懂爬虫.学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方面,像 Python这样的编程语言提供越来越多的优秀工具,让爬虫变得 ...
- JavaScript:使用JavaScript 实现注册表单的校验
说明:在点击提交时进行表单校验,具体要求如下: 1)用户名为3~16个字符,且不能包含”@”和”#”字符: 2)密码和校验密码必须一致,且长度在8个字符到16个字符: 3)兴趣爱好至少选择一项: 4) ...
- js特效,轻松实现内容的无缝平滑滚动
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http ...