手勢解鎖demo實現的基本思路

------------- 基本思路 --------------算法

1. 搭建界面,九宮格算法spa

2. 處理按鈕選中狀態代理

3. 按鈕之間畫線orm

4. 手指和按鈕之間畫線事件

5. 判斷解鎖密碼是否正確圖片



具體實現:it

1. 拖拽圖片素材io

2. 設置控制器 view 的背景色爲"HomeButtomBG"圖片平鋪後的效果容器

self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"HomeButtomBG"]];select

3. 在控制器中拖拽一個 UIView, 設置寬高都是300, 並設置約束(在父容器中水平、垂直居中對齊)

4. 自定義一個 view, 設置這個自定義 view 與界面上的 view 相關聯

5. 在自定義 view 中添加一個 buttons 屬性, 在懶加載中生成9 UIButton, 而且把這寫 Button 都添加到 view 中。

- 建立每一個 UIButton

- 設置每一個 UIButton的默認狀況下的背景圖片、 selected 下的背景圖片

6. layoutSubviews 方法中根據九宮格的方式計算每一個按鈕的 frame

7. 實現觸摸到某個按鈕的時候, 讓這個按鈕的狀態變成 selected

7.1 在自定義 view touchesBegan:方法中根據當前的觸摸點, 判斷是否觸碰到了某個按鈕

- 設置這個按鈕的 selected狀態(YES;

- 把這個按鈕記錄下來(添加到 selectedButtons 集合中)add

7.2 在自定義 view touchesMoved:方法中根據當前的觸摸點, 判斷是否觸碰到了某個按鈕

- 設置這個按鈕的 selected狀態

- 把這個按鈕記錄下來(添加到 selectedButtons 集合中), 同時要判斷這個按鈕是否已是 selected = YES, 避免重複添加。

- 同時記錄下本次觸摸的 point currentPoint屬性中。

** 注意: 此處必須設置按鈕禁止與用戶交互(btn.userInteractionEnabled = NO;), 否者手指觸摸到按鈕上之後, 按鈕會捕獲這個觸摸事件, 就不會觸發 view touchesBegan:事件了。

8. drawRect:方法中繪製線條

- 判斷若是 self.selectedButtons長度爲0, 那麼直接返回不須要繪製任何內容

- 若是 self.selectedButtons長度不爲0:

1> 循環 self.selectedButtons集合中的每一個按鈕

2> 判斷若是是第一個按鈕那麼移動到起點(起點爲第一個按鈕的 center point

3> 若是不是第一個按鈕那麼直接添加線段到這個按鈕的 center point

4> 繪製完畢按鈕之後, 最後再添加一條線段到 currentPoint

9. touchesEnded:方法中, 將全部按鈕的 selected 狀態設置爲 NO, 清空 self.selectedButtons 集合, 從新繪製。

10. 爲每一個按鈕添加一個 tag, 用來判斷手勢解鎖是否正確

- 經過代理把解鎖的密碼傳遞給控制器, 在控制器中判斷解鎖是否正確, 若是正確代理方法返回 YES, 不然返回 NO

- 在定義 view , 根據代理方法返回的結果判斷若是 YES, 那麼直接執行第9

- 若是返回爲 NO:

1> 先將 self.selectedButtons中的全部按鈕selected狀態設置爲 NO, enabled 也設置爲 NO

2> 在把線條顏色設置爲紅色

3> 執行重繪

4> 0.5秒鐘以後, 在執行第9

相關文章
相關標籤/搜索