讓我們實作一些常見的滑動解鎖功能吧!
在隕石開發期間我們碰到了一個蠻特殊的功能,就是滑動解鎖。使用者必須透過這個滑動的操作來執行一些特定的功能。而至於為什麼要使用滑動的方式呢?我聳了聳肩,我也不知道,但我猜可能是因為比較「潮」吧。
在 Swift 中我們有許許多多的手勢可以使用,而滑動 Swipe 也算是其中的一個手勢,而某些時候我們需要判斷其滑動的幅度時,那我們該怎麼判斷呢?下面就來帶大家用不同的方式,做不同的滑動解鎖方式。
首先我們來一個最基本的方法,設置 UISwipeGestureRecognizer
,這邊要注意的是一個 swipe 手勢只會支援一個方向,默認為 .right,我們可以透過 .direction
來設置:
接著我們新增一個 handleGesture
的方法,並且透過 gesture
參數來判斷滑動的方向:
讓我們看看效果(這邊忘了模擬器怎麼用滑動手勢,只能用實機錄影 QQ):
如此一來,我們就能在我們想要的元件上加上手勢,並且手勢完成時執行我們想要的操作。
使用 touch 方式來做滑動解鎖的話,我們可以使用 touchesBegan
配合 touchesEnded
來實作。首先我們透過 touchesBegan
來設置起點,接著在 touchesEnded
設定終點:
接著我們新增一個函數來檢查 startPoint
與 endPoint
的距離,最後判斷其滑動的方向:
這邊稍微說明這個 function 的過程:
return
。畫面基本上就跟上面用 Swipe 相同。但是在這邊我們可以設定一個基本距離,如果滑動的距離沒有大於這個基本距離的話,則不算是一個滑動操作。
所以我們可以在 x, y 移動距離皆小於 100 時,顯示滑動失敗,並且 return
結束執行。接著讓我們看一下畫面。
所以顯示 Swipe failure 時,表示我們滑動的距離過短,操作失敗。
當然最簡單的方式還是可以用 UISlider 來做最輕鬆啦。我們透過 valueChanged
事件來知道 Slider
的值為多少:
這邊我們判斷 slider 目前的值等於 slider 最大值時,則判斷滑動成功,反之則是失敗,你也可以自由設定滑動值大於多少算是成功。並且我們在滑動結束時將 slider 的值調整至最小值。
接著我們把 Slider 的 Continuous Updates
給取消,讓我們在 Slider 完成拖曳時才調用 valueChanged
。(如果沒有取消則會一直調用):
你也可以透過 slider.isContinuous = false
來關閉它。 最後讓我們看一下畫面:
當然如果長這樣你可能會不滿意,所以你可以設置 Slider 的 ThumbImage 以及其他顏色等等,讓他看起來不那麼的原生(業主需求總是無法原生實現啊...),這邊簡單示範一個:
那麼這次滑動解鎖教學就到這邊結束了,可以根據你的需要使用不同的方式來實作相對應的滑動解鎖功能,如果你有更好的滑動解鎖的做法或方式也歡迎跟我交流分享。