原文:Swift 简简单单实现手机九宫格手势密码解锁

大家可以看到我之前的文章[HTML5 Canvas简简单单实现手机九宫格手势密码解锁

本文是使用苹果语言对其进行了移植 颜色配色是拾取的支付宝的颜色

本文的目的说明:语言是想通的  只要思路在 语言只是手段而已

这是本人自学swift一个礼拜 然后花了三个小时写出来的肯定会有不规范的地方

因为思路比较简单 大家可以参考 javascript 版本

废话不多说先上效果

(对了 大家如果能在转载的地方注明出处的话 那就是极好的 http://www.cnblogs.com/zzzzz/p/swift.html  )

自定义一个UIView对象,注意需要在启动的controller中实例化这个对象然后给controller附上

  1. override func viewDidLoad() {
  2. super.viewDidLoad()
  3. // Do any additional setup after loading the view, typically from a nib.
  4. self.view = NineCellLockView(frame: CGRectZero)
  5. }

然后是主要的代码UIView:

  1. import UIKit
  2.  
  3. class NineCellLockView: UIView {
  4.  
  5. var fingerPoint:CGPoint = CGPoint()
  6. var linePointointCollection:Array<CGPoint> = Array<CGPoint>()
  7. var ninePointCollection:Array<CGPoint> = Array<CGPoint>()
  8.  
  9. var selectPointIndexCollection:Array<Int> = Array<Int>()
  10.  
  11. var circleRadius:CGFloat = 28
  12. var circleCenterDistance:CGFloat = 96
  13. var firstCirclePointX:CGFloat = 96
  14. var firstCirclePointY:CGFloat = 200
  15.  
  16. func FillNinePointCollection()
  17. {
  18. for row in 0...2
  19. {
  20. for column in 0...2
  21. {
  22. let tempX:CGFloat = CGFloat(column)*self.circleCenterDistance + self.firstCirclePointX
  23. let tempY:CGFloat = CGFloat(row)*self.circleCenterDistance + self.firstCirclePointY
  24. self.ninePointCollection.append(CGPoint(x: tempX,y:tempY))
  25. }
  26. }
  27. }
  28.  
  29. func drawCicle(centerPoint:CGPoint,index:Int)
  30. {
  31. var context = UIGraphicsGetCurrentContext();
  32. CGContextSetLineWidth(context, 2.0);
  33. CGContextAddArc(context, centerPoint.x, centerPoint.y, self.circleRadius, 0.0, CGFloat(M_PI * 2.0), 1)
  34. let currentIsSelected:Bool = contains(self.selectPointIndexCollection, index)
  35. if(currentIsSelected)
  36. {
  37. //96 169 252
  38. CGContextSetStrokeColorWithColor(context, UIColor(red: 96/255.0, green: 169/255.0, blue: 252/255.0, alpha: 1).CGColor)
  39. }else
  40. {
  41.  
  42. CGContextSetStrokeColorWithColor(context, UIColor(red: 144/255.0, green: 149/255.0, blue: 173/255.0, alpha: 1).CGColor)
  43. }
  44. CGContextStrokePath(context);
  45. CGContextAddArc(context, centerPoint.x, centerPoint.y, self.circleRadius, 0.0, CGFloat(M_PI * 2.0), 1)
  46. CGContextSetFillColorWithColor(context, UIColor(red: 35/255.0, green: 39/255.0, blue: 54/255.0, alpha: 1).CGColor)
  47. CGContextFillPath(context)
  48. if(currentIsSelected)
  49. {
  50. CGContextAddArc(context, centerPoint.x, centerPoint.y, 10, 0.0, CGFloat(M_PI * 2.0), 1)
  51. CGContextSetFillColorWithColor(context, UIColor(red: 96/255.0, green: 169/255.0, blue: 252/255.0, alpha: 1).CGColor)
  52. CGContextFillPath(context)
  53. }
  54. }
  55.  
  56. func drawNineCircle()
  57. {
  58. for p in 0...self.ninePointCollection.count-1
  59. {
  60. self.drawCicle(self.ninePointCollection[p],index:p);
  61. }
  62.  
  63. }
  64.  
  65. override init(frame:CGRect)
  66. {
  67. super.init(frame:frame)
  68. //26 29 40
  69. self.backgroundColor = UIColor(red: 35/255.0, green: 39/255.0, blue: 54/255.0, alpha: 1)
  70. FillNinePointCollection()
  71. }
  72.  
  73. required init(coder aDecoder: NSCoder) {
  74. fatalError("init(coder:) has not been implemented")
  75. }
  76.  
  77. func DrawLine(p1:CGPoint,p2:CGPoint)
  78. {
  79. var bp = UIBezierPath()
  80. bp.lineWidth = 3
  81. bp.lineCapStyle = kCGLineCapRound
  82. UIColor(red: 96/255.0, green: 169/255.0, blue: 252/255.0, alpha: 1).setStroke()
  83. bp.moveToPoint(p1)
  84. bp.addLineToPoint(p2)
  85. bp.stroke()
  86.  
  87. }
  88.  
  89. override func drawRect(rect: CGRect) {
  90.  
  91. if(self.selectPointIndexCollection.count > 0)
  92. {
  93. for index in 0...self.selectPointIndexCollection.count-1
  94. {
  95. let nextIndex = index+1
  96. if(nextIndex <= self.selectPointIndexCollection.count-1)
  97. {
  98. let firstPointIndex=self.selectPointIndexCollection[index]
  99. let secondPointIndex=self.selectPointIndexCollection[nextIndex]
  100. self.DrawLine(self.ninePointCollection[firstPointIndex],p2:self.ninePointCollection[secondPointIndex])
  101. }
  102. }
  103. if self.fingerPoint.x != -100
  104. {
  105. let lastPointIndex=self.selectPointIndexCollection[self.selectPointIndexCollection.count-1]
  106. self.DrawLine(self.ninePointCollection[lastPointIndex],p2:fingerPoint)
  107. }
  108.  
  109. }
  110. self.drawNineCircle()
  111. }
  112.  
  113. func distanceBetweenTwoPoint(p1:CGPoint,p2:CGPoint)->CGFloat
  114. {
  115. return pow(pow((p1.x-p2.x), 2)+pow((p1.y-p2.y), 2), 0.5)
  116. }
  117.  
  118. func CircleIsTouchThenPushInSelectPointIndexCollection(fingerPoint:CGPoint)
  119. {
  120.  
  121. for index in 0...self.ninePointCollection.count-1
  122. {
  123. if(!contains(self.selectPointIndexCollection, index))
  124. {
  125. if(self.distanceBetweenTwoPoint(fingerPoint,p2:self.ninePointCollection[index]) <= circleRadius)
  126. {
  127. self.selectPointIndexCollection.append(index);
  128. }
  129. }
  130. }
  131.  
  132. }
  133.  
  134. override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
  135. var t = touches.anyObject() as UITouch
  136. self.selectPointIndexCollection.removeAll(keepCapacity: false)
  137. self.fingerPoint = t.locationInView(self)
  138. self.CircleIsTouchThenPushInSelectPointIndexCollection(fingerPoint);
  139. self.setNeedsDisplay()
  140. }
  141.  
  142. override func touchesMoved(touches: NSSet, withEvent event: UIEvent) {
  143. var t = touches.anyObject() as UITouch
  144. self.fingerPoint = t.locationInView(self)
  145.  
  146. self.CircleIsTouchThenPushInSelectPointIndexCollection(self.fingerPoint);
  147.  
  148. self.setNeedsDisplay()
  149. }
  150.  
  151. override func touchesEnded(touches: NSSet, withEvent event: UIEvent) {
  152. self.fingerPoint.x = -100
  153. self.setNeedsDisplay()
  154. if(self.selectPointIndexCollection.count>0)
  155. {
  156. var ReStr:String = ""
  157. for index in 0...self.selectPointIndexCollection.count-1
  158. {
  159. ReStr += String(self.selectPointIndexCollection[index]) + ","
  160. }
  161.  
  162. let alertV = UIAlertView(title: "您的结果", message: ReStr, delegate: nil, cancelButtonTitle: "我知道了")
  163. alertV.show()
  164. }
  165. }
  166. }

  

Swift 简简单单实现手机九宫格手势密码解锁的更多相关文章

  1. HTML5 Canvas简简单单实现手机九宫格手势密码解锁

    原文:HTML5 Canvas简简单单实现手机九宫格手势密码解锁 早上花了一个半小时写了一个基于HTML Canvas的手势解锁,主要是为了好玩,可能以后会用到. 思路:根据配置计算出九个点的位置,存 ...

  2. iOS 九宫格手势密码

    代码地址如下:http://www.demodashi.com/demo/11490.html 一.准备工作 需要准备什么环境 xcode,iOS8+ 本例子实现什么功能 主要实现手势密码设置,验证 ...

  3. Appnium+python实现手势密码为什么总是报错

    最近一直在尝试Appnium实现Android手机自动化测试,一直一直卡在一个点上,那就是手势密码,因为所测应用的手势密码使用的不是单个的imageview实现的手势密码解锁窗,所以只能靠坐标点来定位 ...

  4. App自动化(2)--Python&Appium实现安卓手机九宫格解锁

    九宫格作为常见的手势密码,我们在使用的时候,是从起点开始,按住不放,然后滑动手指,直到最后一个点松开手指,如果与设置的手势密码匹配,则解锁成功. 现在大多数九宫格作为一个元素存在,很难定位到每一个点. ...

  5. 支付宝钱包手势密码破解实战(root过的手机可直接绕过手势密码)

    /* 本文章由 莫灰灰 编写,转载请注明出处. 作者:莫灰灰    邮箱: minzhenfei@163.com */ 背景 随着移动互联网的普及以及手机屏幕越做越大等特点,在移动设备上购物.消费已是 ...

  6. [转载]支付宝钱包手势密码破解实战(root过的手机可直接绕过手势密码)

    /* *转自http://blog.csdn.net/hu3167343/article/details/36418063 *本文章由 莫灰灰 编写,转载请注明出处. *作者:莫灰灰    邮箱: m ...

  7. Html5实现手机九宫格password解锁功能

    HTML5真的是非常强大,前端时间看到一个canvas实现九宫格的password解锁. 今天抽空模仿了一个,特定分享一下. 效果截图例如以下: 效果看起来还不错吧! 源代码例如以下: <!DO ...

  8. swift 实现iOS手势密码、指纹密码、faceID

    本博客包含了如何实现iOS手势密码.指纹密码.faceID全步骤,包括了完整的代码. 先附上demo地址https://github.com/Liuyubao/LYBTouchID,支持swift3. ...

  9. Appium-实现手势密码登陆

    前言: 前几天有人问我,手势登陆如何做?于是我找了一个APP试了试,所以本文来总结使用Python+Appium来实现手势密码登陆APP. 环境: MacOS:10.13.4 Appium-deskt ...

随机推荐

  1. ramoops具体失败原因来解释驱动寄存器

    正在使用linux的ramoops驱动器模块,当编译完成加载.查找驱动程序加载失败.显然,直接用内核代码,为什么会出现这种情况? 第一眼ramoops初始化代码: 180 static int __i ...

  2. TCP与UDP的侵略性

    HTTP必须执行在TCP上吗?SSL必须执行在TCP上吗?...实际上HTTP并没有规定一定要执行在TCP上,甚至FTP也不一定要执行在TCP上!HTTP或者FTP仅仅是说底层信道要保证数据的按序传输 ...

  3. AspNet MVC4 教育-28:Asp.Net MVC4 Ajax技术部门四舍五入余速Demo

    A.创建一个Basic项目类型. B.于Models创建一个文件夹: DivModel.cs: using System; using System.Collections.Generic; usin ...

  4. unity3d 各功能的运行秩序,打回来,订购,的次数

    Update 当MonoBehaviour启用时,其Update在每一帧被调用. 仅调用一次(每帧) LateUpdate 当Behaviour启用时,  每帧调用一次: FixedUpdate 当M ...

  5. T-SQL问题解决集锦——数据加解密

    原文:T-SQL问题解决集锦--数据加解密 以下代码已经在SQLServer2008上的示例数据库测试通过 问题一:如何为数据进行加密与解密,避免使用者窃取机密数据? 对于一些敏感数据,如密码.卡号, ...

  6. SQL Server中的TempDB管理——TempDB基本知识(为什么需要版本存储区)

    原文:SQL Server中的TempDB管理--TempDB基本知识(为什么需要版本存储区) 参考资料来自: http://blogs.msdn.com/b/sqlserverstorageengi ...

  7. NSIS 自定义页面制作关闭功能

    因工作需要要自定义NSIS的安装页面,其中用到一个功能. 修改的是这个项目:https://github.com/nicecai/nsissource http://hamletsoft.com/ 在 ...

  8. Python补充04 Python简史

    原文:Python简史 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python是我喜欢的语言,简洁,优美,容易使用.前两天, ...

  9. spring mvc中实现csrf安全防御简记

    1.csrf是什么 csrf全称是Cross-site request forgery,http://en.wikipedia.org/wiki/Csrf 危害:使受害用户在不经意间执行了不是用户意愿 ...

  10. 王立平--Button底,点击效果设置

    1.新....xml <? xml version="1.0" encoding="utf-8"?>        <selector xml ...