亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

使用Swift代碼實現iOS手勢解鎖、指紋解鎖實例詳解

2020-07-26 03:19:55
字體:
來源:轉載
供稿:網友

一、手勢密碼

1、

1.1、用UIButton組成手勢的節點。

1.2、當手指接觸屏幕時,調用重寫的 touchesBegan:withEvent方法(在touchesBegan里調用setNeedsDisplay,這樣就會自動調用drawRect方法)。

1.3、當手指在屏幕上滑動時,調用重寫的touchesEnded:withEvent方法。

這兩個方法執行的操作是一樣的:通過locationInView獲取 觸摸的坐標,然后用 CGRectContainsPoint 判斷手指是否經過UIButton,如果經過按鈕,就更換按鈕的圖片,同時 保存劃過按鈕的tag。

1.4、默認情況下 跳躍連線 第1個和第3個節點,中間的第2個節點 會被忽略,所以要單獨進行處理。根據1和3節點 的2個UIButton的坐標 計算出第1個和第3個節點 中間的坐標,判斷該坐標是否存在UIButton,如果存在就加入設置選中,并加入選中數組。

到這里 就已經實現了 手指滑過 節點的時候 節點被選中的效果:

 // MARK: - Override // 當手指接觸屏幕時,就會調用touchesBegan:withEvent方法; override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {  print("執行touchesBegan")  selectBtnTagArray.removeAll()  touchesChange(touches) } //當手指在屏幕上移動時,調用touchesMoved:withEvent方法; override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {  touchesChange(touches) } //當觸摸被取消(比如觸摸過程中被來電打斷),就會調用touchesCancelled:withEvent方法。 override func touchesCancelled(touches: Set<UITouch>?, withEvent event: UIEvent?) { } //當手指離開屏幕時,就會調用touchesEnded:withEvent方法; override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {  print("執行touchesEnded")  var alertTitle = "請設置正確的手勢"  var alertMessage = "手勢密碼不能少于4個"  var isSuccess = false  if selectBtnTagArray.count >= 4 {   alertTitle = "手勢密碼設置成功"   isSuccess = true   alertMessage = "密碼為:/(selectBtnTagArray)"  }  gestureLockDelegate!.gestureLockSuccess(isSuccess, title: alertTitle, message: alertMessage)  gesturePoint = CGPointZero;  self.setNeedsDisplay() } // MARK: - PrivateMethod private func initButtons() {  for i in 0...8 {   //第幾行   let row = i / 3   let loc = i % 3   //兩個button的間距   let btnSpace = (screenWidth - 3*btnWH)/4   let btnX = btnSpace + (btnWH + btnSpace) * CGFloat(loc)   let btnY = 70 + btnSpace + (btnWH + btnSpace) * CGFloat(row)   let gestureNodeBtn = UIButton(frame:CGRectMake(btnX, btnY, btnWH, btnWH))   gestureNodeBtn.tag = i   gestureNodeBtn.userInteractionEnabled = false //不響應用戶的交互。一定要加上這句   gestureNodeBtn.setImage(UIImage(named: btnImgNormal), forState: .Normal)   self.addSubview(gestureNodeBtn)   btnArray.append(gestureNodeBtn)  } } private func touchesChange(touches: Set<UITouch>) {  //獲取 觸摸對象 ,觸摸對象的位置坐標來實現  gesturePoint = touches.first!.locationInView(self)  for btn in btnArray {   //判斷 手指的坐標 是否在 button的坐標里   if !selectBtnTagArray.contains(btn.tag) && CGRectContainsPoint(btn.frame, gesturePoint) {    //處理跳躍連線    var lineCenterPoint:CGPoint = CGPoint()    if selectBtnTagArray.count > 0 {     lineCenterPoint = centerPoint(btn.frame.origin, endPoint: btnArray[selectBtnTagArray.last!].frame.origin)    }    //保存中間跳躍 過的節點    for btn in btnArray {     if !selectBtnTagArray.contains(btn.tag) && CGRectContainsPoint(btn.frame, lineCenterPoint) {      btn.setImage(UIImage(named: btnImgSelected), forState: .Normal)      selectBtnTagArray.append(btn.tag)     }    }    //保存劃過的按鈕的tag    selectBtnTagArray.append(btn.tag)    btn.setImage(UIImage(named: btnImgSelected), forState: .Normal)   }  }  //setNeedsDisplay會自動調用drawRect方法 進行畫線  self.setNeedsDisplay() } //計算2個節點中心的坐標 private func centerPoint(startPoint: CGPoint, endPoint:CGPoint) -> CGPoint {  let rightPoint = startPoint.x > endPoint.x ? startPoint.x : endPoint.x  let leftPoint = startPoint.x < endPoint.x ? startPoint.x : endPoint.x  let topPoint = startPoint.y > endPoint.y ? startPoint.y : endPoint.y  let bottomPoint = startPoint.y < endPoint.y ? startPoint.y : endPoint.y  //x坐標: leftPoint +(rightPoint-leftPoint)/2 = (rightPoint+leftPoint)/2  return CGPointMake((rightPoint + leftPoint)/2 + btnWH/2, (topPoint + bottomPoint)/2 + btnWH/2); } func recoverNodeStatus() {  selectBtnTagArray.removeAll()  for btn in btnArray {   btn.setImage(UIImage(named: btnImgNormal), forState: .Normal)  }  self.setNeedsDisplay() }

2、畫線:在drawRect方法中進行畫線。

 override func drawRect(rect: CGRect) {  print("執行drawRect")  let context = UIGraphicsGetCurrentContext() //獲取畫筆上下文  var i = 0  for tag in selectBtnTagArray {   if (0 == i) {    //開始畫線,設置直線的起點坐標    CGContextMoveToPoint(context, btnArray[tag].center.x, btnArray[tag].center.y)   } else {    //畫直線,設置直線的終點坐標    CGContextAddLineToPoint(context, btnArray[tag].center.x,btnArray[tag].center.y)   }   i = i+1  }  //如果有選中的節點,就取 跟著 手指的滑動 畫線  if (selectBtnTagArray.count > 0) {   // 移除最后一條多余的線,   if gesturePoint != CGPointZero {    CGContextAddLineToPoint(context, gesturePoint.x, gesturePoint.y)   }  }  CGContextSetLineWidth(context, 10)  //設置畫筆寬度  CGContextSetLineJoin(context, .Round) //兩個線相交點 平滑處理  CGContextSetLineCap(context, .Round) //設置線條兩端的樣式為圓角  CGContextSetRGBStrokeColor(context, 227/255.0, 54/255.0, 58/255.0, 1)  CGContextStrokePath(context)   // //對線條進行渲染 }

二、指紋驗證

iPhone 的Home鍵 上的金屬環 能感應手指,通知Touch ID 讀取指紋,Touch ID 傳感器 可以拍攝 皮膚 皮下層指紋。

每次使用指紋,Touch ID 會持續的添加新的指紋特性,進一步提高準確、安全性。

Touch ID 不會儲存指紋的圖像。它只存儲指紋的數學表達式。設備中的芯片還包含稱為“Secure Enclave”的高級安全架構,專門用于保護密碼和指紋數據。指紋數據通過 Secure Enclave 的專用密鑰得到加密和保護。iOS 和其他 app 絕不會訪問您的指紋數據,指紋數據絕不會存儲到 Apple 服務器、 iCloud 或其他地方。

1、  import LocalAuthentication

2、用 LAContext 類的  canEvaluatePolicy 方法 判斷設備是否支持指紋,然后用 evaluatePolicy 方法 來進行指紋驗證。

執行evaluatePolicy方法,系統會自動彈出 驗證指紋的提示框,提示副標題可以自己設定。

如果輸入錯誤后,系統會自動進入“再試一次”的提示框,點擊右邊的 “輸入密碼”選項,要自己寫代碼實現 輸入密碼的彈框。

Demo地址:https://github.com/bugaoshuni/TouchIDAndGestureLock

以上所述是小編給大家介紹的使用Swift代碼實現iOS手勢解鎖、指紋解鎖實例詳解,希望對大家有所幫助!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人黄色av免费在线观看| 欧美激情影音先锋| 国产精品观看在线亚洲人成网| 欧美性猛交xxxx免费看久久久| 国产一区二区av| 色妞一区二区三区| 成人免费视频97| 综合激情国产一区| 欧美性20hd另类| 久久夜色精品国产亚洲aⅴ| 欧美视频精品一区| 日韩免费av在线| 8x海外华人永久免费日韩内陆视频| 欧美日韩黄色大片| 国产精品久久国产精品99gif| 欧美精品久久久久久久| 日日摸夜夜添一区| 欧美性极品xxxx娇小| 国产精品久在线观看| 欧美成人亚洲成人日韩成人| 日韩一区二区三区国产| 欧洲美女免费图片一区| 欧美另类99xxxxx| 国产日产久久高清欧美一区| 欧美高清激情视频| 欧美多人乱p欧美4p久久| 亚洲午夜色婷婷在线| www日韩欧美| 国产精品偷伦视频免费观看国产| 日韩成人在线观看| 一区二区欧美在线| 国产精品亚洲一区二区三区| 亚洲国产女人aaa毛片在线| 欧美精品情趣视频| 国产精品美女久久久免费| 日韩国产精品视频| 亚洲第一男人天堂| 久久国内精品一国内精品| 久久99久久99精品中文字幕| 欧美日韩免费区域视频在线观看| 欧美电影《睫毛膏》| 热久久美女精品天天吊色| 美女性感视频久久久| 91av视频在线免费观看| 亚洲成在人线av| 日韩专区在线观看| 成人黄色片在线| 国产精品久久久久久久久久新婚| 国内精品小视频在线观看| 国产精品一区二区久久精品| 亚洲午夜国产成人av电影男同| 日韩有码片在线观看| 国产香蕉97碰碰久久人人| 亚洲女人天堂视频| 久久精品99久久香蕉国产色戒| 国产亚洲精品91在线| 久久久人成影片一区二区三区| 一区二区av在线| 成人久久一区二区| 日韩激情视频在线播放| 国产精品欧美风情| 亚洲成人在线网| 97在线视频免费看| 欧美亚洲在线观看| 国产日韩欧美自拍| 亚洲天堂av电影| 日韩一区二区av| 精品久久香蕉国产线看观看亚洲| 亚洲精品中文字幕有码专区| 国产一区二区三区中文| 亚洲欧美成人精品| 亚洲free性xxxx护士白浆| 欧美激情精品久久久久久变态| 亚洲精品乱码久久久久久按摩观| 欧美专区中文字幕| 在线丨暗呦小u女国产精品| 成人亚洲欧美一区二区三区| 亚洲欧美999| 欧美极品在线视频| 国内精品久久久久久久| 国产精品久久综合av爱欲tv| 26uuu亚洲国产精品| 在线观看欧美日韩国产| 久久久久久国产精品美女| 欧美成人在线免费视频| 久久精品视频网站| 国产伦精品一区二区三区精品视频| 欧美日韩在线视频观看| 亚洲国产一区二区三区四区| 亚洲第一av网| 欧美大全免费观看电视剧大泉洋| 国产视频精品免费播放| 亚洲精品中文字| 国产成人在线播放| 亚洲午夜小视频| 国产一区二区三区日韩欧美| 深夜福利91大全| 欧美电影免费在线观看| 国产剧情久久久久久| 日韩av不卡电影| 久久成人精品一区二区三区| 亚洲欧美一区二区精品久久久| 91免费在线视频| 久久久久中文字幕| 国产999视频| 亚洲欧美日韩高清| 国产精品18久久久久久麻辣| 国产一区二区三区中文| 久久九九全国免费精品观看| 国产成人jvid在线播放| 成人网址在线观看| 国产日韩精品综合网站| 欧美色图在线视频| 精品久久香蕉国产线看观看亚洲| 国产在线精品播放| 成人精品久久一区二区三区| 欧美成人h版在线观看| 欧美日韩加勒比精品一区| 欧美做受高潮1| 国内精品国产三级国产在线专| 欧美交受高潮1| 国产美女搞久久| 亚洲一区中文字幕| 国内精品国产三级国产在线专| 日韩精品小视频| 久久久久九九九九| 日韩精品中文字幕在线播放| 成人两性免费视频| 92国产精品视频| 中文日韩电影网站| 色噜噜狠狠狠综合曰曰曰88av| 久久国产精彩视频| 亚洲自拍偷拍视频| 久久久久久成人| 欧美有码在线观看视频| 亚洲精品98久久久久久中文字幕| 亚洲日韩欧美视频一区| 欧美精品免费在线| 国产激情视频一区| 亚洲一区二区三区四区在线播放| 久久精品国产成人| 亚洲欧美三级在线| 中文字幕久热精品在线视频| 日韩在线免费视频| 91丝袜美腿美女视频网站| 国产精品美女在线| 538国产精品视频一区二区| 国产婷婷色综合av蜜臀av| 欧洲亚洲在线视频| 亚洲精品xxx| 97成人超碰免| 视频直播国产精品| 日韩精品免费在线视频观看| 国语自产精品视频在线看| 亚洲欧美一区二区三区四区| 国产亚洲欧美日韩一区二区| 亚洲色图17p| 色无极亚洲影院| 亚洲伊人一本大道中文字幕| 亚洲国产一区二区三区四区| 久久色在线播放| 中文精品99久久国产香蕉| 91探花福利精品国产自产在线| 亚洲国产精品大全|