Swiftで遊ぼう! - 329 - My Picker Project : カスタム Picker View コードをみていく
Swiftで遊ぼう!の古い記事-> Life-LOG OtherSide
質問 : Swiftで遊ぼう! - 252 - FaceViewプロジェクト始動 - Swiftで遊ぼう! on Hatena
コードを書いていくのにどこに注目すべきでしょう。私はviewDidLoad()メソッドに目がいきます。
アプリが立ち上がった時にまず呼ばれるメソッドなので初期設定ができます。
まずスロットで回すイメージを読み込む必要があります。実はTab Barのアイコンを設定するときにスロット用のアイコンも読み込んでいました。
ここでimages.xcassetsにイメージを置いたので、これをプロパティ内に取り込むのが次のコード。
override func viewDidLoad() { super.viewDidLoad() images = [ UIImage(named: "seven")!, UIImage(named: "bar")!, UIImage(named: "crown")!, UIImage(named: "cherry")!, UIImage(named: "lemon")!, UIImage(named: "apple")! ] winLabel.text = " " }
ついでにwinLabelにスペースを入れます。こうしないとラベルが消えてしまってコンストレイントが崩れてしまいます。
そして「スピン」を押したときのコードを入力します。
@IBAction func spin(sender: AnyObject) { var win = false var numInRow = -1 var lastVal = -1 for i in 0..<5 { let newValue = Int(arc4random_uniform(UInt32(images.count))) if newValue == lastVal { numInRow++ } else { numInRow = 1 } lastVal = newValue picker.selectRow(newValue, inComponent: i, animated: true) picker.reloadComponent(i) if numInRow >= 3 { win = true } } winLabel.text = win ? "WINNER" : " " }
3つのプロパティを用意します。5つのコンポーネントが3つ連続して同じマークになると勝ちという判定にします。winはBoolean型で初期値はfalseです。
numInRowは同じマークが並んでいくと和が増えていきます。初期値は「-1」ですが、最初のコンポーネントが設定されたところで「1」になります。2つ並ぶと「2」になり、3つ並ぶと「3」になります。そしてnumInROwが「3」になった時、winはtrueになります。そして、winの判定がtrueならwinLabelのタイトルに「WINNER」が入ります。
newVlaueを発生する「rc4random_uniform(UInt32(images.count))」は既に考察済み。
次は、デリゲーションメソッドですが、明日にします。