Swift2で簡単な目覚まし時計(Alarm Clock)?を作る!
Xcode projectの作成
まずはプロジェクトを作成!とりあえず起動!
今回はiOS ApplicationのSingle View Applicationを作る!楽だから!Next!
この辺は適当に!Next!
好きなディレクトリを選んでCreate!これでプロジェクトの作成は完了!
画面作成
Createを押した後こんな画面になるけどスルーして左上のファイル一覧からMain.storyboardを選択!
こんなのが出る!真ん中の白いスペースをドラッグするとグリグリ動く!
ってことでとりあえず何か貼り付ける!今回は目覚まし時計っぽいものを作るってことでまず必要なのは時間を設定するやつ!一番右下にある検索窓にDateと打ち込むとDate Pickerというのが出てくるからそれをドラッグして白いスペースにドロップ!
でかっ!
適当にいじって調整して真ん中に持ってくる!
このままだとアプリを動かした時にDate Pickerが真ん中に表示されない!なぜか!なので便利ツールを使う!下の方にある |-△-| みたいなやつをクリック!!!!するとメニューが出てくるのでAdd Missing Constraintsをクリック!!!!!!!
そうするとこんな感じに!??これでアプリを起動しても位置がずれない!!
同じ要領でButtanとLabelも貼り付けてく!
ここで起動!!!左上の再生ボタンみたいなのを押す!ちょっと待つ!...アプリっぽい!
Connect
とりあえず停止ボタンを押して元の画面へ!右上にあるメビウスの輪みたいに輪っかが2つ重なってるみたいなボタンをクリック!
多分こんな感じになる!ごちゃごちゃしすぎて見難い!
次はちょっとテクニックがいる!さっきスペースに貼り付けたDate Pickerやラベルやボタンをプログラム上に持っていかなくてはいけない!じゃないと使えな!けどどうやって!!!???それは...簡単!貼り付けたオブジェクトの上でcontrolキーを押しながらドラッグして右のViewController.swiftの画面上に持ってくだけ!何言ってるかわからなくてもとりあえずやってみる!
こんな感じのが出れば成功!適当に名前つけてあげてConnect!
続いてDate Picker!
次もDate Picker!今回はちょっと違う!Actionになってる!こうすることでDate Pickerが動いた時に呼び出される関数を作れる!
Buttonも同じくAction!!!
これで接続完了!!!!!
プログラミング
いよいよプログラミング!今度は右上のメビウスの輪を元に戻してViewController.swiftをいじる!
試しにボタンを押したらコンソールに何かプリントされるような機能をさっき作った関数に加えてみる!
コピペ用!
print("test: myDP moved!") print("test: myButton Pushed!")
これで再生ボタンを押してアプリを起動してからDate PickerやButtonを触ってみると...
Xcodeの方の画面になんか出力されてる!
目覚まし時計っぽい機能の実装
とりあえずコード!
import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. // 起動した時点の時刻をmyLabelに反映 myLabel.text = getNowTime() // 時間管理してくれる _ = NSTimer.scheduledTimerWithTimeInterval(60, target: self, selector: "update", userInfo: nil, repeats: true) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } @IBOutlet weak var myLabel: UILabel! @IBOutlet weak var myDPvar: UIDatePicker! private var tempTime: String = "00:00" private var setTime: String = "00:00" @IBAction func myDPfunc(sender: AnyObject) { // test print print("test: myDP moved!") // DPの値を成形 let format = NSDateFormatter() format.dateFormat = "HH:mm" // 一時的にDPの値を保持 tempTime = format.stringFromDate(myDPvar.date) } @IBAction func myButtonfunc(sender: AnyObject) { // アラームをセット setTime = tempTime // test print print("test: myButton Pushed!") } func getNowTime()-> String { // 現在時刻を取得 let nowTime: NSDate = NSDate() // 成形する let format = NSDateFormatter() format.dateFormat = "HH:mm" let nowTimeStr = format.stringFromDate(nowTime) // 成形した時刻を文字列として返す return nowTimeStr } func update() { // 現在時刻を取得 let str = getNowTime() // myLabelに反映 myLabel.text = str // アラーム鳴らすか判断 myAlarm(str) } func myAlarm(str: String) { // 現在時刻が設定時刻と一緒なら if str == setTime{ alert() } } // アラートの表示 func alert() { let myAlert = UIAlertController(title: "alert", message: "ring ding", preferredStyle: .Alert) let myAction = UIAlertAction(title: "dong", style: .Default) { action in print("foo!!") } myAlert.addAction(myAction) presentViewController(myAlert, animated: true, completion: nil) } }
使い方
起動!Date Pickerに現在時刻が表示されてると思うので1分後くらいにスクロールする!(ドラッグ)そしてButtonをクリック!1分待つとダイアログが表示される!
色々説明
詳しくはコメント読んで!ググって!!!
- まずアプリ起動時にviewDidLoadが呼び出されるはず!
- myLabelにgetNowDateで取得した現在時刻を渡す!
- NSTimer.〜が設定した時間ごとに選択した関数を呼び出してくれてるはず!!
- 60秒毎に設定してるためちょっと起動が遅れてる(1とか1/60とかも可能!その際myAlarmがそのままだと大変なことに!?)
- NSDateFormatterは日付時刻なんかのデータを指定した形式にしてくれる感じ!
- NSDateは現在時刻を教えてくれる!年月日から秒まで教えてくれる!!
- UIAlert〜はダイアログ出すためのもの!
こんな感じで!