App 的解鎖畫面(passcode)

在畫面一開始,我先新增一些我會用到的元件。例如:註明輸入密碼的label、四位數密碼會用到的四個image view、還有數字跟刪除鍵的button。

除了底圖星空照片是從網路上下載的之外,其他都是內建的元件。

至於照片放入則是先拉一個image view拉大到跟螢幕一樣大,然後再把照片從Assets裡拉進去。

接下來這張照片是各自對應的Outlet,在這裡無論是星星image還是數字button我都是拉outlet collection。

拉完之後,我宣告一些我會用到的常數跟變數。
在這裡,因為正確密碼只會有一組,所以我是用常數來宣告,其餘都是變數。

各種的function:

變更照片

參考其他學長姐的程式碼,在這裡我用swtich來判斷目前點擊的次數(currentClip)是多少,再來改變我的圖片。

在這裡會看到每個case中,都是先將highlight取消,再個別判斷是否highlight,原因是按下button後,會依照currentClip的次數來highlight。

但是,以delete來說,每取消一個currentClip的次數,如果只有本來的highlight,就沒有判斷取消highlight的功能,所以先將全部取消,每次delete都能再判斷開啟多少highlight。

看到這裡大家一定會疑問hightlight到底是要幹嘛用的?這裡我們先回到storyboard的介面來看。

紅色框框是一開始我所設定的image view所顯示的圖片。而在Highlighted的欄位我選了填滿的星星圖片(上面的藍色框框),代表是能更改圖片的,但也必須注意這個圖案是不能被使用者選取的,所以interaction(下面的藍色框框)不能打勾。

在這邊設定完之後,我們再看回變更照片的程式碼:.isHighlighted = true 代表變更照片成我所設定的填滿的星星。

確認密碼是否正確

在這裡我先寫一個條件式:當點擊次數等於四次時,才會執行這個function。

接著,當用戶所輸入的密碼 等於 或 不等於 正確密碼時,會各自跳出一個訊息視窗。
*此篇文章的最後我會放入彼得潘的訊息視窗教學連結。

對於初次寫這程式的人一定要注意,最後一句:present(allertController, animated: true, completion: reset)一定要寫,不然訊息框不會彈跳出來。

在最後一項completion,我這邊寫的是reset。原因是因為當輸入正確/錯誤密碼時,我都想讓畫面重新開始,所以我放入一個reset的function,如果大家不想要讓畫面或是程式碼有變動,那填入nil就好了。

重新開始

將所有數值歸零,至於變更照片沒寫在這程式裡,是因為在變更照片的function中我已經寫了最後一項default: for i in 0…3 {imagesOutlet[i].isHighlighted = false},來讓星星圖片回歸到最一開始沒填滿的樣子。

function寫好後,我們來拉IBAction的outlet。

點擊數字的button

再拉數字button的時候,我將0~9的button全部拉進同一個IBAction裡,避免我要重複作業很多次。

每當點擊一次button,就先把curentClip的數值+1,然後讓function能夠正確的去跑,避免出現bug。

至於這裡看到的sender.tag則是我們在一開始設定button時就要先輸入的數值,方便程式碼在運行時,能夠自己將正確的數值代入currentNumber(用戶輸入的密碼)中。

那要怎麼設定tag呢?我們先回到button元件裡面,點擊button元件會跑出這個畫面。

接著拉到最下面,有個tag,我們在這裡修改數值就好。

刪除button

最後,為了讓畫面跑起來的時候,能夠讓數字button能跟iphone一樣是圓形的,所以在button時我們要來設定他的圓角度。

一樣,我們先點擊button元件,然後確認這個元件的長跟寬的數值,並且一定要是正方形,並且要選clips to bound!

我們知道數值是100後,接著我們再到另一個頁面來設定將100/2=50,就可以變成圓角,但必須在模擬器跑動時才會看到變圓角,如果在storyboard裡還是一樣的。

模擬器操作畫面如下

此程式的GitHub網址

參考的文章

--

--