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的過程。
參考:手勢鎖視訊
(女老師,感覺不食人間煙火,一點廢話也沒有,一點調侃也沒有,比較生硬,但是聲音還算不難聽)
(對程式碼和實現手勢鎖的原理進行了簡單的介紹,程式碼和我的程式碼有些區別,但是實現的結果是一樣的)
最後,哪裡不對的地方可以給我留言,我會及時改進的,謝謝大家。
相關文章
- 2018螢幕指紋解鎖智慧手機推薦 螢幕指紋手機哪些值得買?
- 手機螢幕畫素排列方式探究 手機螢幕畫素排列方式有哪些?
- iOS指紋解鎖和手勢解鎖iOS
- AirServer 7.2.6 手機投到Mac並錄製手機螢幕AIServerMac
- win10平板模式螢幕手勢失效怎麼辦_win10平板模式螢幕手勢不能用如何解決Win10模式
- iQOO手機怎麼設定捂住螢幕靜音?iQOO手機捂住螢幕靜音的設定方法
- 網站如何自適應手機螢幕?網站
- 安卓手機如何投影到電腦?手機螢幕投影到電腦安卓
- OPPO即將推全新概念手機,手機螢幕可拉伸收縮
- 雷蛇遊戲手機Razer Phone 2:最強LCD螢幕遊戲手機遊戲
- 努比亞Alpha手錶手機亮相:柔性螢幕 設計前衛
- 如何實現監控手機螢幕?(附原始碼)原始碼
- Mojo Vision:調查顯示iOS“螢幕時間”功能對防治手機沉迷效果微弱iOS
- iOS開發-手勢iOS
- vivo APEX 2019概念機發布:全球首款5G手機 支援全螢幕指紋解鎖
- 將Android手機的螢幕投屏到macos系統上AndroidMac
- 探祕《SSRPG》:手機螢幕上的復古SRPG情結
- iOS 各種螢幕尺寸iOS
- WPF實現手勢解鎖
- 怎麼將蘋果手機螢幕投屏到電腦上蘋果
- iOS中的螢幕導航iOS
- iOS 螢幕錄製實現iOS
- iOS ReplayKit 與 螢幕錄製iOS
- 紅魔Mars手機怎麼截圖截圖?紅魔Mars手機的幾種螢幕截圖方法
- 手機護眼概論及OLED螢幕降低頻閃原理介紹
- Omdia:2020年AMOLED佔智慧手機螢幕總出貨量的29%
- OPPO K1手機正式宣佈 首款千元螢幕指紋手機 主打價效比
- 如何鎖定Mac電腦螢幕?Mac
- iOS螢幕旋轉解決方案iOS
- 使用 guiscrcpy 將你的安卓手機的螢幕投射到你的電腦GUI安卓
- 2021年全球智慧手機螢幕比例市場份額(附原資料表)
- 2021年全球智慧手機螢幕尺寸市場份額(附原資料表)
- Swift橫豎屏切換、自動旋轉螢幕、手動旋轉螢幕、鎖定當前螢幕禁止轉屏、橫豎屏頁面跳轉過度、橫豎屏UI適配SwiftUI
- 防手機鎖屏解鎖自定義ViewView
- iOS 2020年最新螢幕尺寸(pt 、px)iOS
- OPPO K1評測:水滴全面屏,值得購買的螢幕指紋手機
- [教程文件]html5實現圖片自適應手機螢幕頁面的cssHTMLCSS
- Counterpoint:2024年Q3摺疊屏手機螢幕同比出貨量出現下降
- iOS 開發中遇到的手勢衝突iOS