【CocoaPods】挫折しながら学ぶ!素人のiOSアプリ開発 part4【swift】
どうも!
今回は、CocoaPodsを使って「パスワードロック画面」を作成してみたいと思います!
CocoaPods その1で使用した「THPinViewController」というライブラリも、パスワードロック画面作成用のライブラリでした。
ですが「THPinViewController」はObjective-cのみ対応のライブラリだったので、swiftでの使い方がわからず挫折。
それを踏まえて、今回はちゃんとswift対応のライブラリを選びましたよ。
GitHub - recruit-lifestyle/Smile-Lock: A library for make a beautiful Passcode Lock View
ライブラリ名:Smile-Lock
Smile-Lockを導入!
いつもの手順で「Smile-Lock」をインストールし、githubのページを参考に見様見真似で実装。
できた!!!
なんか恐ろしく左上に寄ってますが、とりあえず表示はされてますね!
noobな僕は表示させるだけで大苦戦しました。
Githubのページに詳しい実装方法が書いてないんですよね〜。どこを見て実装するのが正しいの?
パスワードロック画面の機能実装 その1
さて!
外観ができたのはいいとして(!?)、機能の方はまったく実装していません!
(※機能=パスワードの正誤とか、正しかった場合の動作とかそういうの)
機能はどうやって実装するんだよ〜とgithubページを探し回っていたら、・・・なるほど!
よくよく見てみたらソースコードの中にサンプルプロジェクトが入ってるじゃないですか!
なるほど、みんなはこれを見て実装してたのか〜。
まぁ中身をみてもサッパリわからなかったんだけどね・・・。
そして挫折へ。
パスワードロック画面の機能実装 その2
サンプルプロジェクトを2日かけてじっくり読んだところ、いい感じに実装することができました。
いい感じいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいいい!!!!!!!!!
ちゃんとパスワードロックの機能も搭載しています。(下記)
・パスワードが正しかったら画面遷移
・パスワードが間違っていたらブルブルっと震える
・削除ボタンをおすと1文字消える
まぁ全部ライブラリが用意してくれてた関数なんですけどね。
import UIKit
import SmileLock
class PasswordLoginController: UIViewController {
//パスワード画面を生成
var passwordContainerView: PasswordContainerView!
//パスワードの桁数
let kPasswordDigit = 4
override func viewDidLoad() {
super.viewDidLoad()
//create PasswordContainerView
passwordContainerView = PasswordContainerView.create(in: パスワード画面を挿入するところ(UIViewなど), digit: kPasswordDigit)
passwordContainerView.delegate = self
passwordContainerView.deleteButtonLocalizedTitle = "削除"
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
extension PasswordLoginController: PasswordInputCompleteProtocol {
func passwordInputComplete(_ passwordContainerView: PasswordContainerView, input: String) {
if validation(input) {
validationSuccess()
} else {
validationFail()
}
}
func touchAuthenticationComplete(_ passwordContainerView: PasswordContainerView, success: Bool, error: Error?) {
if success {
self.validationSuccess()
} else {
passwordContainerView.clearInput()
}
}
}
private extension PasswordLoginController{
func validation(_ input:String) -> Bool{
// ここでパスワードの照合を行う。
return input == "1111"
}
func validationSuccess(){
// パスワードが正しかった時の処理
}
func validationFail(){
// パスワードが間違っていた時の処理(画面がブルブルっと震える)
passwordContainerView.wrongPassword()
}
}
想像以上に簡単に実装できて感動しました。「パスワードが間違ってたらブルブルっと震える」なんて、「.wrongPassword()」一行でOKなんですよ。今まで0から作ろうとしていたのがバカみたいです。ライブラリって素晴らしいんですね。
ただ、現在は「正解パスワード」をソースコードに直書きしている状態です。
次なる試練は、オプション画面からパスワードを設定できるような仕組みにすることですね。ひぇ〜!!!!!!!!!
その他、覚えたことなど!
「Extention」で便利に拡張!
参考:UIViewの位置操作・取得を簡単に行うための拡張 - Qiita
「Extention」という技術をはじめて使ってみました。「Extention」というのは拡張機能を追加する仕組みらしいんですが、まぁいつもながら詳しいことはよく分かりません。
上記はViewの位置調整を簡単にする拡張機能です。
swiftファイルを新規作成して、上記のソースコードをコピペするだけで準備OK。
あとは「view.top = 100 」等のコードを書くだけで使えます。
ストーリーボードでは調整できないViewなんかの位置調整する際に良さそうですね。