iOS 手機螢幕手勢鎖
最近一直沒有更新簡書是因為在開發和測試階段,有任務,沒有進行學習,不過在做任務的時候也遇到了一些技術點,在這裡總結一下。
今天看了一個視訊,是關於手機螢幕手勢鎖的(以下簡稱“手勢鎖”)。手機螢幕手勢鎖的應用很廣泛,尤其在支付app和OA類的app中用到的比較多,今天我們就按照視訊上的思路進行一下學習和整理總結。
整體來說該方法在實現手勢鎖的過程中,使用到的知識點可以歸納為以下:button九宮格、touch觸控事件、UIBezierPath貝塞爾曲線、代理等等。其實我們把這幾個知識點拆開來看都不是很難,我們在平時也沒有少用。那麼我們就開始!
這裡說明一下,我這裡沒有完整的程式碼塊,即便有,也只是部分的截圖,大家可以看每張截圖的左邊程式碼的行數,就知道大概的位置了,另外我會在文章最後貼上兩個連結,一個連結是老師的視訊連結,另一個連結是一個程式碼塊的程式碼,具體程式碼的實現和我的這篇文章的程式碼會有些出入,但是實現原理是一樣。
首先傳一個gif動畫,看一下我們最後實現的效果:
然後貼上素材,我就是因為找素材找了半天,但是最後找到的素材還不是教程上邊的,湊合著用吧,總之是有點影響效果,但是不影響我們們學習知識的過程。
下邊分別是高亮狀態和normal狀態的素材。和教材的區別就是人家的圖片是圓的,我這裡的是截圖,方形的。
我們來看一下我們xcode中的組織結構:
這裡我大概說一下實現思路:首先自定一個LockView,然後在controller裡面呼叫該view,AppDelegate跳轉controller進行展示。最主要的程式碼是在自定義的view裡面實現的。
首先第一個知識點:視訊裡的老師還講到了const的作用:定義的變數是隻讀的,不能修改。在其他類中不能宣告相同名字的變數。
這裡我們可以實驗一下:
上邊我在自定義的LockView.m中對CGFloat變數btnCount進行了const定義,而上圖中我又在controller裡面對同樣名字的CGFloat變數進行定義,結果是什麼呢?我們Command+B進行編譯,結果報下圖的錯:
而我們試圖將controller裡面的名字改成btnCount1,再進行編譯的時候是可以通過的。
通過驗證,我們對const的認識加深了。
下邊我們繼續我們手勢鎖的實現。我們來自定義view裡面.m具體的程式碼實現。
視訊裡面是用storyboard實現view和controller的,而我們這裡是純程式碼實現。不管用哪一種,最終的實現效果是一樣的。而上邊的兩個方法,註釋裡面解釋到了上述兩種方法分別會在什麼情況下被呼叫。
也就是說,不管是什麼情況建立的view,總會呼叫[selfaddButtons];這個方法。下邊我們就來看這個方法。
九宮格的實現,相信大家在實際專案中並沒有少寫過吧,這裡不進行詳細介紹了。
這裡需要說明的有兩點,視訊裡面講的方法個別地方有些實現起來不太對的,那麼我們可以自己略微的修改。上邊綠色的字就是,使用視訊裡面的方法確實是好,看著也很新穎,也合理,之前也沒有用過,可是就是在我們程式碼裡面實現不了,沒辦法,只好再按照forin迴圈遍歷的方法,將button的狀態進行修改了。
下圖是對出現過兩次的程式碼的封裝方法:
還有就是下邊講到的drawrect方法裡面的貝塞爾曲線設定顏色的順序,我進行了調整,不調整的話,根本賦不上顏色值,幸好我之前看過貝塞爾弧線。僥倖。
至此,自定義view完成,主要是在touch觸控事件裡面完成對九宮格狀態的修改、在drawrect方法裡面對九宮格連線進行了處理。
我們看一下自定義view的.h檔案裡面的程式碼,主要是定義了一個代理,自定義view裡面實現代理是在touchEnd方法裡面,就是觸控結束的時候,然後再controller裡面呼叫設定自定義view的代理self。
controller裡面的程式碼:呼叫自定義view和設定alert方便觀察密碼正確與否。
最後是appDelegate裡面呼叫controller的程式碼:
至此,手勢鎖就完成了。當然會有如下兩種情況我們沒有辦法模擬:
1、如果輸入錯誤超過n次,會不允許繼續輸入,並且可能會有鎖死的狀態。
2、輸入密碼正確進入app。應該是自定義view銷燬或者頁面push的過程。
參考:手勢鎖視訊
(女老師,感覺不食人間煙火,一點廢話也沒有,一點調侃也沒有,比較生硬,但是聲音還算不難聽)
(對程式碼和實現手勢鎖的原理進行了簡單的介紹,程式碼和我的程式碼有些區別,但是實現的結果是一樣的)
最後,哪裡不對的地方可以給我留言,我會及時改進的,謝謝大家。
相關文章
- HTML5實現螢幕手勢解鎖HTML
- 2018螢幕指紋解鎖智慧手機推薦 螢幕指紋手機哪些值得買?
- android 手機監聽螢幕鎖屏,使用者解鎖Android
- AirServer 7.2.6 手機投到Mac並錄製手機螢幕AIServerMac
- iOS指紋解鎖和手勢解鎖iOS
- iOS手勢解鎖和指紋解鎖iOS
- win10平板模式螢幕手勢失效怎麼辦_win10平板模式螢幕手勢不能用如何解決Win10模式
- iQOO手機怎麼設定捂住螢幕靜音?iQOO手機捂住螢幕靜音的設定方法
- 迴歸小螢幕手機 蘋果下代新品或配4寸螢幕蘋果
- Android動態控制手機螢幕方向Android
- 一圖瞭解你的手能用多大螢幕智慧手機
- 安卓手機如何投影到電腦?手機螢幕投影到電腦安卓
- 雷蛇遊戲手機Razer Phone 2:最強LCD螢幕遊戲手機遊戲
- 大螢幕手機助蘋果超越三星蘋果
- 如何實現監控手機螢幕?(附原始碼)原始碼
- Android手機如何錄製螢幕及轉GIFAndroid
- iOS 手勢操作iOS
- 360奇酷手機自動旋轉螢幕怎麼關閉 360奇酷手機自動旋轉螢幕關閉教程
- IOS 手勢攔截iOS
- 蘋果獲眼神手勢控制螢幕專利 或將用於電視蘋果
- Mojo Vision:調查顯示iOS“螢幕時間”功能對防治手機沉迷效果微弱iOS
- 怎麼將蘋果手機螢幕投屏到電腦上蘋果
- 圖片大小自適應手機螢幕程式碼例項
- 如何防止手機網頁雙擊螢幕實現放大效果網頁
- 蘋果手機專利曝光:iPhone或將採用側螢幕蘋果iPhone
- 手機螢幕上的戰爭 三星領先蘋果半步蘋果
- iOS開發 手勢密碼解鎖和指紋TouchID解鎖iOS密碼
- WPF實現手勢解鎖
- Android判斷螢幕狀態與螢幕解鎖和鎖定Android
- IOS中手勢UIGestureRecognizeriOSUI
- 小米手環2正式釋出!搭配OLED螢幕
- 暑期熱門大螢幕智慧手機精選 5.7英寸屏起步
- 一加手機3評測 懸浮螢幕、一鍵免打擾
- 手機QQ影片兒童鎖在哪兒?手機QQ影片兒童鎖使用教程
- 基於swift4.0實現視訊播放、螢幕旋轉、倍速播放、手勢調節,鎖屏皮膚等功能Swift
- iOS 各種螢幕尺寸iOS
- 用 canvas 實現 Web 手勢解鎖CanvasWeb
- 原生 JavaScript 實現手勢解鎖元件JavaScript元件