iOS-九宮格密碼解鎖

發表於2016-07-18

前言:看了幾篇簡書,九宮格密碼解鎖,看著不錯,拿來學習一下。

一、實現效果

112156697-4afbd493717f54a7

實現效果

二、手勢解鎖實現過程

分析:

如圖所示:

①設定控制器view背景圖片
[解析]:拖入圖片素材,並設定控制器View的背景圖片

122156697-c0a9afa6420e4237

設定控制器view背景圖片

②自定義view並與控制器中新拖入的view進行關聯

132156697-05aa261fb43081bf

自定義view並與控制器中新拖入的view進行關聯

③搭建UI

142156697-5da35568fc802509

控制元件佈局

152156697-602e169c55e4c6d0

設定觸控點,實現兩個代理

④建立儲存選中按鈕的陣列,並把選中按鈕新增其中,畫線重繪

162156697-7cc593d7237a6870
172156697-60b8bc4a192f3190

  • 解決問題:已經被連過的按鈕,不能再連線。
    [解析]:
    1.由於每次畫線的時候,我們都會呼叫touchbegin和touchmove方法,如果每次選中的按鈕都在你觸控的範圍內,都會新增到選中按鈕的陣列中。這樣,就會造成重複新增按鈕。即第二次,觸控已經選中的按鈕,同樣也在你觸控的範圍內,這是同樣也會新增到選中按鈕的陣列中。為了解決這個問題,我們可以在touchbegin和touchmove的判斷中加一個條件 !btn.highlighted。如程式碼,意思是當你第二次,重複觸控同一個按鈕時,如果他在你觸控的範圍內且按鈕的狀態不是高亮狀態,即向下執行。

 

2.還有個問題就是,當你在連線按鈕的過程中,在空白間隙停止觸控,這樣,會產生多餘的線。要解決這個問題,首先我們要宣告一個多餘線段的點CGpoint型別。其次,獲取多餘線段的點,多餘線段的點就等於你所觸控獲取的點,進行一下關聯。然後,把多餘的線段畫出來。最後,在touchend這個方法內,也就是當觸控完畢之後,那個多餘的點,就等於,選中按鈕陣列中最後一個按鈕的中心點。在重繪一下,就OK。
182156697-165a2c46f0a9a9a8避免重複新增按鈕

192156697-39118ef088728faa

多餘線段的解決圖1
202156697-4ec37a17f673dcea
多餘線段的解決圖2
212156697-e03210fd3a52e32e
多餘線段的解決圖3

④驗證密碼
[解析]:對與驗證密碼這塊,基本的思路是根據選中按鈕的tag值,來驗證使用者設定的手勢密碼是否與之對等。換句話來說,我們新增在自定義view的按鈕,當每個按鈕被觸碰時,都會變成高亮狀態,被新增到高亮狀態的陣列中。手勢密碼也就相當於(0~9)的密碼串排序。手勢密碼驗證是在,觸控結束後驗證的。所以我們要想驗證密碼,必須在touchend方法裡遍歷高亮陣列獲取按鈕的tag值。並存入可變字串陣列中,與自己設定的手勢密碼字串進行對比。

222156697-64bdf11890ae8a77

設定按鈕的tag值
密碼驗證正確:按鈕高亮狀態消失線消失
不正確:按鈕紅色,線消失:按鈕狀態消失
232156697-242b9215243e2a9c
要想線消失
242156697-e6bca0cb767dd6a8
高亮狀態消失線消失
252156697-fc77018611f4423d

  • 程式碼展示:
  • 知識點補充

    1.九宮格實現原理

相關文章