iOS手勢解鎖

------------- 基本思路 --------------

    1. 搭建界面尝哆,九宮格算法
    1. 處理按鈕選中狀態(tài)
    1. 按鈕之間畫線
    1. 手指和按鈕之間畫線
    1. 判斷解鎖密碼是否正確
      ------------- 基本思路 --------------
  1. 拖拽圖片素材

  2. 設置控制器 view 的背景色為"HomeButtomBG"圖片平鋪后的效果
    self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"HomeButtomBG"]];

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

  4. 自定義一個 view, 設置這個自定義 view 與界面上的 view 相關(guān)聯(lián)

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

  • 創(chuàng)建每個 UIButton
  • 設置每個 UIButton的默認情況下的背景圖片枚抵、 selected 下的背景圖片蹬耘、disabled 下的背景圖片
  1. 在 layoutSubviews 方法中根據(jù)九宮格的方式計算每個按鈕的 frame

  2. 實現(xiàn)觸摸到某個按鈕的時候, 讓這個按鈕的狀態(tài)變成 selected
    7.1 在自定義 view 的 touchesBegan:方法中根據(jù)當前的觸摸點, 判斷是否觸碰到了某個按鈕

  • 設置這個按鈕的 selected狀態(tài)
  • 把這個按鈕記錄下來(添加到 selectedButtons 集合中)

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

  • 設置這個按鈕的 selected狀態(tài)
  • 把這個按鈕記錄下來(添加到 selectedButtons 集合中), 同時要判斷這個按鈕是否已經(jīng)是 selected = YES了, 避免重復添加斥季。
  • 同時記錄下本次觸摸的 point到 currentPoint屬性中。
    ** 注意: 此處必須設置按鈕禁止與用戶交互(btn.userInteractionEnabled = NO;), 否者手指觸摸到按鈕上以后, 按鈕會捕獲這個觸摸事件, 就不會觸發(fā) view的 touchesBegan:事件了参萄。
  1. 在 drawRect:方法中繪制線條
  • 判斷如果 self.selectedButtons長度為0, 那么直接返回不需要繪制任何內(nèi)容
  • 如果 self.selectedButtons長度不為0:
    1> 循環(huán) self.selectedButtons集合中的每個按鈕
    2> 判斷如果是第一個按鈕那么移動到起點(起點為第一個按鈕的 center point)
    3> 如果不是第一個按鈕那么直接添加線段到這個按鈕的 center point
    4> 繪制完畢按鈕以后, 最后再添加一條線段到 currentPoint卫枝。
// 線條的顏色
#define SteveZLineColor [UIColor colorWithRed:0.0 green:170/255.0 blue:255/255.0 alpha:1.0]

/** 

 錯誤:
 <Error>: void CGPathAddLineToPoint(CGMutablePathRef, const CGAffineTransform *, CGFloat, CGFloat): no current point.

 原因:
 在第一次繪圖的時候 path 對象中沒有任何點
 
 解決:(判斷如果沒有需要繪制的按鈕, 那么就直接返回)
 if (self.selectedButtons.count == 0) {
    return;
 }
 
 */
  1. 在touchesEnded:方法中, 將所有按鈕的 selected 狀態(tài)設置為 NO, 清空 self.selectedButtons 集合, 重新繪制。

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

  • 通過代理把解鎖的密碼傳遞給控制器, 在控制器中判斷解鎖是否正確, 如果正確代理方法返回 YES, 否則返回 NO
  • 在定義 view 中, 根據(jù)代理方法返回的結(jié)果判斷如果 YES, 那么直接執(zhí)行第9步
  • 如果返回為 NO:
    1> 先將 self.selectedButtons中的所有按鈕selected狀態(tài)設置為 NO, enabled 也設置為 NO
    2> 在把線條顏色設置為紅色
    3> 執(zhí)行重繪
    4> 0.5秒鐘之后, 在執(zhí)行第9步讹挎。
  1. 細節(jié)處理
  • 透明問題
    1> 如果是完全通過代碼創(chuàng)建 UIView, 在繪圖的時候, 如果指定了控件的透明(opaque = NO)opaque 表示不透明, 那么在繪圖時會有問題校赤。
    2> 如果希望是透明, 那么要把顏色指定為 clearColor, 而不是 opaque = NO

Demo : https://github.com/Joeyechang/gestureUnlock.git

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市筒溃,隨后出現(xiàn)的幾起案子马篮,更是在濱河造成了極大的恐慌,老刑警劉巖怜奖,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浑测,死亡現(xiàn)場離奇詭異,居然都是意外死亡歪玲,警方通過查閱死者的電腦和手機迁央,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來滥崩,“玉大人岖圈,你說我怎么就攤上這事「破ぃ” “怎么了幅狮?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長株灸。 經(jīng)常有香客問我,道長擎值,這世上最難降的妖魔是什么慌烧? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮鸠儿,結(jié)果婚禮上屹蚊,老公的妹妹穿的比我還像新娘。我一直安慰自己进每,他們只是感情好汹粤,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著田晚,像睡著了一般嘱兼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上贤徒,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天芹壕,我揣著相機與錄音汇四,去河邊找鬼。 笑死踢涌,一個胖子當著我的面吹牛通孽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播睁壁,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼背苦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了潘明?” 一聲冷哼從身側(cè)響起行剂,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎钉疫,沒想到半個月后硼讽,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡牲阁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年固阁,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片城菊。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡备燃,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出凌唬,到底是詐尸還是另有隱情并齐,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布客税,位于F島的核電站况褪,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏更耻。R本人自食惡果不足惜测垛,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望秧均。 院中可真熱鬧食侮,春花似錦、人聲如沸目胡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽誉己。三九已至眉尸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背效五。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工地消, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人畏妖。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓脉执,卻偏偏與公主長得像,于是被迫代替她去往敵國和親戒劫。 傳聞我的和親對象是個殘疾皇子半夷,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容