ザ・コーチ -最高の自分に出会える『目標の達人ノート』-を読んだ

「1日30分」を続けなさい!に目標設定の話が出ていたのですが、具体的にどうやって目標を設定したらいいのかわかりませんでした。なので、目標設定について参考になればと思い本書を読んでみました。  

小説のような書き方になっていて、主人公と一緒に目標設定について学ぶことが出来る本です。
「目標」という言葉の意味や、どのように目標を設定して活用していけばいいのか、ということがわかりやすく書かれていました。

ザ・コーチ

ザ・コーチ

gawao.hateblo.jp

「目的・ゴール・目標・夢・ビジョン」の意味

  • 目標を掲げる人は多いが、本当の意味で目標を活かしきっている人は少ない
  • 目標とは何かについて学習をしていない。学校では教えてくれない
  • 目的
    • 成し遂げようと目指す事柄
  • ゴール
    • 目的のための最終的な目印
  • 目標
    • 目的を達成するために設けた目当て
    • 目的に向けての目印
    • ゴールまでの途中の目安や通過点
    • 将来実現させたいと、心のなかに思い描いている願い
    • 目標ではなく、あくまでも願望
  • ビジョン
    • 将来あるべき姿を描いたもの
    • 頭のなかで思い描いた光景を見るだけで感情が湧くもの
    • ゴールに向けて行動するための強化剤

「目的・ゴール・目標・夢・ビジョン」という言葉の意味について考えたり調べた事はありませんでした。
今までは、何となく「目的=ゴール=目標」だと思っていましたし、「夢」は壮大なものでないといけないと思っていました。

「目的、ゴール、目標」の3つが揃って初めて目標をたてることの効果が生まれるそうです。今まで何となく立てていた「目標」が守れていなかったのは、「目的、ゴール」を考える事をせずに「ノルマ」として「目標」を考えていたからかもしれません。

本書では、”「夢」を書き出してその中からどうしても実現したいと思う事について、「目的、ゴール、目標」を決めて行動を初めて見ると良い”とありましたので、夢(願望)を書き出すことから始めてみようと思います。

「目的・ゴール・目標・夢・ビジョン」を明確にして行動していくことで得られる恩恵

  • 共感者や協力者との出会い
  • 人間的な成長
  • 人生で見る景色が変わる

他にも沢山ありました。いいことしかないじゃないか!本当かなぁ。。
自分のやるべきことを明確にして行動していくので、ゴールを目指す過程で成長していけるという事だと思います。
自分の信じる道を突き進んでいる人は魅力的ですよね。
何事も行動してみないとどうなるかわからないな、と改めて思いました。

「目的・ゴール・目標・夢・ビジョン」の設定

  • 生きがいや、やりがいにつながる目的とゴールをセットで設定
  • 目的はゆるぎなく、ゴールを手にする方法は無限にあると知り目標は柔軟に
  • 目標≠ノルマ(行動計画)
  • 目標はあくまでも通過点
  • ゴールを構成している要素を分解し、期日・量・基準を盛り込んで目標を立てる
  • ゴールや目標を表す言葉は、自分の価値観に合う言葉で表現
  • 自分の行動特性を見極めて行動計画を立てる

目標設定から行動計画の立て方まで、具体的な方法が書かれていました。
一番上に目的を置いた「ゴールツリー」を作り、その下に目的達成のために必要な複数のゴール群、さらにゴール群の下にそれぞれのゴールを細分化した要素群がつながります。

まとめ

とても読みやすい本でしたし、「具体的にどうやって目標を設定し、行動にうつしていくのか」という問に対するヒントが得られました。

「1日30分」を続けなさい!の目標設定の話と重なる部分も多く、本書を読んだ上で読み返すとまた新しい発見ができそうです。あとは行動あるのみ。。。全てを実践しようとすると結構時間がかかりそうですが。

本書の主人公は、3年後に新しい山(目的・夢)が見え、5年後に本をだします(!)。主人公の成長と、物語の最後のシーンに涙しました。

「1日30分」を続けなさい!を読んだ

勉強やブログなど、全く続かずに中途半端になっている状況から脱却したいなぁと思っていた時にこの本が紹介されているのを目にしたので読んでみました。
筆者の経験から導き出した勉強を続けるための方法、勉強することの大事さが書かれている本です。
中長期的な目標から短期目標まで設定し、それを達成するためには勉強を習慣化することが大切だという事が書かれていました。

勉強の習慣を身につける

  • 毎日30分や1時間でいいから習慣化
  • 勉強とは、読書を含め一段階高いレベルに向上させるあらゆる活動
  • 毎日が重要
  • 成功・不成功を繰り返し、少しずつ習慣を身につける

学生時代から勉強の習慣は全くありませんでした。テスト前に一気に勉強するタイプ。
大人になってからは、学生時代よりは勉強をしているつもりなのですが習慣化は出来ていません。
「毎日コードを書こう」「毎日本を読もう」などと目標を立てるものの、実現出来ていませんでした。毎日長時間勉強しようと思っていたので続かなかったのかなぁと思いました。
毎日決まった時間に勉強することをルーティンに入れて習慣化出来るようになりたいです。

効率よく知識を吸収する

  • 身銭を切る
  • 勉強したことは、後日誰か他の人に教えるつもりで勉強する

自分のお金で本を買ったりセミナーに参加すれば、勉強に身が入るということ。
人から借りたり図書館で借りるのがあまり好きではないので、読みたいなと思った本はすぐに買ってしまいます。ただ、読まない、、、。本の量だけ見るとものすごい知識量のはず。今本棚にある本の8割は読んでいない気がします。身銭を切っても知識を吸収していない悪い例。来年は本の読み方、買い方も考えていきたいと思います。

人に教えると自分もより理解出来るというのは前から言われていることだと思います。人に教える機会がない場合でも、ブログにアウトプットすることで知識が定着するはずなので、ブログを、、ブログを書こう。

勉強時間の捻出

  • テレビを見なければ2ヶ月分の時間を捻出出来る
  • 早朝や残業時間帯
  • 通勤時間

「テレビを見ない」という考えは今まで持ったことがなかったので驚きました。
言われてみれば、ぼーっとテレビを見ている時間がとても多いです。
パソコン開いてネットサーフィンしながらテレビを垂れ流しているのですが、何の生産性もない時間だなぁと。
全く見ないのは無理なので、少しずつテレビをBGMにしていた時間を勉強の時間に割り当てられたらいいなと思います。

残業時間帯は勉強、、うーん。今まで残業が多い会社ばかりだったので、なかなか難しいです。やるなら早朝にしたいと思いました。目指せ朝型。

通勤時間帯は座ることが出来れば本を読むのに絶好の時間かと思います。が、スマフォでゲームしてネット見て寝て終わっているのが現状です。意識を変えていかないとこの辺は実践できないですね。

勉強に集中する

  • 集中力はせいぜい30分
  • 比較的短い時間の勉強 -> 休憩のサイクルを繰り返す
  • 勉強が嫌になる前に勉強を一時中断する
  • 集中力が落ちたり、飽きたら即刻勉強を中止する

ポモドーロ・テクニックに通じるものがあるな、と思いました。仕事で少し試したことがあるのですが、その時はうまく活用出来ませんでした。やり方がよくなかったと思います。
試しに、本書を読む時に「30分読む->15分休憩」を繰り返してみました。本を読んでいるといつもは途中で飽きてしまい、本の内容が全く頭に入ってきていませんでした。この「読む->休憩」の方法を試してみると、飽きることなく集中して読むことが出来たと思います。
長時間机に向かっていても何も頭に入らないのは集中力が続いていなくて飽きているからですね。ぼんやりとはわかっていましたが、「机に向かっている時間が大事 」という意識のほうが強かったので、改善して集中出来るようにしたいと思いました。

目標設定方法

  • 先に最終目標を描いてから目標を細分化
  • 何のために勉強し、いつまでに勉強の成果を出す必要があるのか、ということを紙に書き出して視覚的にチェック
  • 目標があると行動が変わる。行動が違えば成果が大きく違う

期日を含めて明確にゴールを決めておいてから、中期目標、1日目標を設定していくといいそうです。
「◯◯できたらXXする」という目標しか今までしていなかったかもしれません。
ゴールを決めていたとしても、期日までは決めていなかったり。
目標を設定していても、その目標を達成するためにどのように行動するか、までは考えたことがないと思います。この「どのように行動するか」を意識するようになるだけで、日々の勉強の成果が変わってくる気がしました。

まとめ

実体験にもとづいている本なので、説得力があるように感じました。 英語を身につけるための勉強量が半端ない。本気で勉強していないので、英語が身につかないはずです。
全く同じことは出来ないけれど、「勉強の習慣を身につける」「勉強に集中する」「目標設定」については大変参考になることが多く、自分の意識を変える手助けをしてくれたと思います。何度も読み返して習慣化の意識を忘れないようにしたいと思います。
まずは目標設定から、、少しずつ少しずつ。

iPhone5sをiOS9にアップグレード!。。出来ず

OSXYosemiteにしたついでにiOS9にしたらアップグレード出来ませんでした。。(泣)

iPhone5s /iOS7。
iOS8には上げずにずーっと放置していたのですが、OneNoteのアプリを使いたくてアップグレードすることに。
ちらっと調べた感じだと、iPhone5sでのiOS9の動作には問題なかったようなのでアップグレードしてみたところ、無事にアップグレード完了!と思いきや スライドでアップグレード という文言が表示されて全く反応せず。。。
Twitter上でも同じ不具合の方が沢山。

寝て起きたら治ってる事を期待しつつ寝て起きたわけですが、当然何も解決しておらず。。

色々調べていた所、こちらにたどり着きました。

www.reddit.com

取り敢えずiPhoneを使えるようにするために、一番上にあるコメントの通りに 8.4.1 を入れることに。
自分のiPhoneiPhone 5s(GSM) だったのでこちらをダウンロード。

記述通りに進めていき、DFUモードにしてoptionキーをクリックしながら復元をクリック。
ダウンロードしたファイルを選択して復元。
しばらく待つとアクティベート画面が出ました。

アクティベートして、保存していたバックアップから復元を試みました。(バックアップ取っておいてよかった。。)

見事復活!!!!ε-(´∀`*) iOS 8.4.1 になってました。
ゲームのデータを心配していたのですが、無事でした。よかった。

iOS8.4.1からiOS9へのアップグレードは問題ないようですが、ちょっと怖いのでもう少し様子を見ることにします。

DayOne Syncも出来るようになったし、 Score! Hero (サッカーゲーム)も進められるようになりました。
OneNoteのアプリも入って快適。

取り敢えずこれで外に出れます。

この一件でiPhoneへの依存度がすごいと思い知らされました。
目覚まし、時計、乗り換え、地図、連絡先、予定、、、ないと外出出来ない(´・ω・`)

何か対策考えないとー


最近はcocos2d-jsを使ったお仕事しています。もうあっぷあっぷして泡吐きながら仕事しています。がんばろう。

LINEスタンプ売上と統計情報

LINEスタンプが承認されてから1ヶ月が経過したので、売上と統計情報を見てみた。

LINEスタンプがやっと承認された!! - gawaooooo.blog

売上レポート

2月

f:id:gawao:20150403150144j:plain

  • 2/27日リリース
  • 自分で購入した分と友達が買ってくれた分。ありがとうございます

3月

f:id:gawao:20150403150210j:plain

  • 3月前半は友達の知り合いの方が買ってくれたとのこと。ありがとうございます
  • 3/31に異変が!3個位売れている・・・一体何があったのでしょうか

4月

  • 売れてません(^^)

統計情報(送信スタンプ数)

f:id:gawao:20150403150233j:plain

  • 3/1〜4/2までのエリア別の送信スタンプ数を見てみると、3/31に台湾で使われていることがわかった
  • 3/31の売上は台湾の方!(多分。ありがとうございます。)
  • 3/31→88個、4/1→177個、4/2→101個と結構使ってくれているみたい。ありがとうございます。ありがとうございます。

売れないのでしばらくレポートを見ていなかったのですが、久しぶりに見たら売れていて嬉しいです。
台湾の方(多分)が使ってくれている事が嬉しい!!
私立恵比寿中学さんのファンの方かな?違うかな?どっちでもいいけど嬉しい!
お友達が作ったスタンプも無事に承認されたようなので、売れるといいなぁ。

チュー犬も絶賛販売中⊂゚U┬───┬~

チュー犬 - LINE スタンプ | LINE STORE

storyboardを使わずに姓名診断アプリを作る

ドットインストールの以下のレッスン

dotinstall.com

を、storyboardを使わずにswiftのみで作ってみる。

storyboardを使わないプロジェクト作成

これ参照

画面に必要な部品

姓名診断画面

f:id:gawao:20150330002724j:plain

診断結果画面

f:id:gawao:20150330002756j:plain

NavigationControllerを設置してタイトルを表示

参考

012 UINavigationControllerの表示 - Swift Docs

コード

AppDelegate.swift 抜粋

var window: UIWindow?
var myNavigaionController: UINavigationController?

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: bject]?) -> Bool {

    // ViewControllerを生成
    let myFirstViewController: ViewController = ViewController()
    // Navigation Controllerを生成
    myNavigaionController = UINavigationController(rootViewController: myFirstViewController)
    
    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
    self.window?.backgroundColor = UIColor.whiteColor()
    // Navigation ControllerをrootViewControllerに設定
    self.window?.rootViewController = myFirstViewController
    self.window?.makeKeyAndVisible()
    
    return true
}

ViewController.swift(姓名診断画面) 抜粋

override func viewDidLoad() {
    super.viewDidLoad()

    // タイトルを設定する
   self.title = "姓名診断"
}

実行結果

f:id:gawao:20150330002913j:plain

ViewControllerの追加と部品の配置

参考

コード

ViewController.swift(姓名診断画面)

import UIKit

class ViewController: UIViewController, UITextFieldDelegate {

    let sendButton: UIButton = UIButton()
    
    override func viewDidLoad() {
        super.viewDidLoad()

        // Controllerのタイトルを設定する
        self.title = "姓名診断"
    
        // UITextFieldを作成する
        let name: UITextField = UITextField(frame: CGRectMake(0, 0, 300, 30))
        // 最初に表示する文字を設定
        name.text = "名前を入力"
        // Delegateを設定する
        name.delegate = self
        // 枠を表示する
        name.borderStyle = UITextBorderStyle.RoundedRect
        // UITextFieldの表示する位置を設定
//        name.layer.position = CGPoint(x: self.view.frame.width/2, y: 150)
        name.layer.position = CGPoint(x: 160, y: 150)
        // Viwに追加する
        self.view.addSubview(name)
        
        // 送信ボタンを設定する
        sendButton.frame = CGRectMake(0, 0, 50, 40)
        // 背景色を設定する
        sendButton.backgroundColor = UIColor.lightGrayColor()
        sendButton.showsTouchWhenHighlighted = true
        // 枠を丸くする
        sendButton.layer.masksToBounds = true
        // タイトルを設定する
        sendButton.setTitle("Send", forState: UIControlState.Normal)
        sendButton.setTitleColor(UIColor.blackColor(), forState: UIControlState.Normal)
        // コーナーの半径を設定する
        sendButton.layer.cornerRadius = 10.0
        // ボタンの位置を指定する
        sendButton.layer.position = CGPoint(x: 340, y: 150)
        // タグを設定する
        sendButton.tag = 1
        // イベントを追加する
        sendButton.addTarget(self, action: "showResult:", forControlEvents: .TouchUpInside)
        // ボタンをViewに追加する
        self.view.addSubview(sendButton)

    }

    /*
        ボタンイベント
    */
    func showResult(sender: UIButton) {
        // 移動先のViewを定義する
        let resultViewController = ResultViewController()
        // ResultViewに移動する
        self.navigationController?.pushViewController(resultViewController, animated: true)
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

ResultViewController(診断結果画面)

import UIKit

class ResultViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // Controllerのタイトルを設定
        self.title = "診断結果"
        
        // Labelを作成
        let label: UILabel = UILabel(frame: CGRectMake(0, 0, 200, 40))
        // 背景色を付ける
        label.backgroundColor = UIColor.lightGrayColor()
        // 文字を代入
        label.text = "あなたの点数は…"
        // テキストを中央寄せにする
        label.textAlignment = NSTextAlignment.Center
        // ラベルを配置する座標を設定する
        label.layer.position = CGPoint(x: self.view.bounds.width / 2, y: 200)
        // ViewにLabelを追加
        self.view.addSubview(label)
        
        // 診断結果表示Labelを作成
        let resultLabel: UILabel = UILabel(frame: CGRectMake(0, 0, 200, 80))
        // 枠線を付ける
        resultLabel.layer.borderColor = UIColor.redColor().CGColor
        // 枠線の太さ
        resultLabel.layer.borderWidth = 2.0
        // 文字を代入
        resultLabel.text = "100点"
        // テキストを中央寄せ
        resultLabel.textAlignment = NSTextAlignment.Center
        // フォントサイズを大きくして太字に
        resultLabel.font = UIFont.boldSystemFontOfSize(64)
        // ラベルを配置する座標を設定する
        resultLabel.layer.position = CGPoint(x: self.view.bounds.width / 2, y: 300)
        // ViewにLabelを追加
        self.view.addSubview(resultLabel    )
        
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

実行結果

f:id:gawao:20150330003218j:plain f:id:gawao:20150330003235j:plain


ここまでで、

  • Sendボタンをクリックして診断結果画面に遷移
  • 診断結果画面から姓名診断画面に遷移

は出来た

姓名診断のText Fieldで入力した値のチェック・値を診断結果画面に表示・点数を表示

参考

010 UIAlertControllerでアラートを表示 - Swift Docs


ここではまってしまった。。。
segueを使わないで画面間で値を受け渡すやり方がわからずに2時間くらい悩んでいた。
名前受け渡し用の変数を作り、そこに値をセットするようにしたら出来たが、これでいいのか・・

コード

ViewController.swift(姓名診断画面)

import UIKit

class ViewController: UIViewController, UITextFieldDelegate {

    let sendButton: UIButton = UIButton()
    var nameField: UITextField!
    
    override func viewDidLoad() {
        super.viewDidLoad()

        // Controllerのタイトルを設定する
        self.title = "姓名診断"
    
        // UITextFieldを作成する
        nameField = UITextField(frame: CGRectMake(0, 0, 300, 30))
        // 最初に表示する文字を設定
        nameField.placeholder = "名前を入力"
        // Delegateを設定する
        nameField.delegate = self
        // 枠を表示する
        nameField.borderStyle = UITextBorderStyle.RoundedRect
        // UITextFieldの表示する位置を設定
        nameField.layer.position = CGPoint(x: 160, y: 150)
        // Viwに追加する
        self.view.addSubview(nameField)
        
        // 送信ボタンを設定する
        sendButton.frame = CGRectMake(0, 0, 50, 40)
        // 背景色を設定する
        sendButton.backgroundColor = UIColor.lightGrayColor()
        sendButton.showsTouchWhenHighlighted = true
        // 枠を丸くする
        sendButton.layer.masksToBounds = true
        // タイトルを設定する
        sendButton.setTitle("Send", forState: .Normal)
        sendButton.setTitleColor(UIColor.blackColor(), forState: .Normal)
        // コーナーの半径を設定する
        sendButton.layer.cornerRadius = 10.0
        // ボタンの位置を指定する
        sendButton.layer.position = CGPoint(x: 340, y: 150)
        // タグを設定する
        sendButton.tag = 1
        // イベントを追加する
        sendButton.addTarget(self, action: "showResult:", forControlEvents: .TouchUpInside)
        // ボタンをViewに追加する
        self.view.addSubview(sendButton)

    }

    /*
        ボタンイベント
    */
    func showResult(sender: UIButton) {
        // 空文字チェック
        if nameField.text == "" {
            showAlert()
        } else {
            // 移動先のViewを定義する
            let resultViewController = ResultViewController()
            // ResultViewに移動する
            self.navigationController?.pushViewController(resultViewController, animated: true)
            
            // TODO これで渡せるな・・?
            resultViewController.myName = nameField.text
        }
    }
    /*
        エラーアラートを表示
    */
    func showAlert() {
        // UIAlertControllerを作成する
        let myAlert = UIAlertController(title: "エラー", message: "診断したい名前を入力してください", preferredStyle: .Alert)
        // OKのアクションを作成する
        let myOkAction = UIAlertAction(title: "OK", style: .Default, handler: nil)
        // OKのアクションを追加する
        myAlert.addAction(myOkAction)
        // UIAlertを発動する
        presentViewController(myAlert, animated: true, completion: nil)
        
    }
    
    /*
    改行ボタンが押された際に呼ばれる
    */
    func textFieldShouldReturn(textField: UITextField) -> Bool {
        
        // returnを押すとキーボードが隠れる
        textField.resignFirstResponder()
        
        // sendButtonと同じ処理を
        sendButton.sendActionsForControlEvents(.TouchUpInside)
        return true
    }
    
    /*
        UITextFieldが編集された直後に呼ばれる
    */
    func textFieldDidBeginEditing(textField: UITextField) {
        println("textFieldDidBeginEditing: \(textField.text)")
    }
    
    /*
        UITextFieldが編集終了する直前に呼ばれる
    */
    func textFieldShouldEndEditing(textField: UITextField) -> Bool {
        println("textFieldShouldEndEditing: \(textField.text)")
        return true
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

ResultViewController(診断結果画面)

import UIKit

class ResultViewController: UIViewController {
    
    // 入力された名前を入れる
    var myName: String = ""
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // Controllerのタイトルを設定
        self.title = "診断結果"
        
        // Labelを作成
        let label: UILabel = UILabel(frame: CGRectMake(0, 0, 200, 40))
        // 背景色を付ける
        label.backgroundColor = UIColor.lightGrayColor()
        // 名前を代入
        label.text = "\(myName)の点数は…"
        // テキストを中央寄せにする
        label.textAlignment = NSTextAlignment.Center
        // ラベルを配置する座標を設定する
        label.layer.position = CGPoint(x: self.view.bounds.width / 2, y: 200)
        // ViewにLabelを追加
        self.view.addSubview(label)
        
        // 診断結果表示Labelを作成
        let resultLabel: UILabel = UILabel(frame: CGRectMake(0, 0, 200, 80))
        // 枠線を付ける
        resultLabel.layer.borderColor = UIColor.redColor().CGColor
        // 枠線の太さ
        resultLabel.layer.borderWidth = 2.0
        // 点数を表示
        let score = arc4random_uniform(101)
        resultLabel.text = "\(score)点"
        // テキストを中央寄せ
        resultLabel.textAlignment = NSTextAlignment.Center
        // フォントサイズを大きくして太字に
        resultLabel.font = UIFont.boldSystemFontOfSize(64)
        // ラベルを配置する座標を設定する
        resultLabel.layer.position = CGPoint(x: self.view.bounds.width / 2, y: 300)
        // ViewにLabelを追加
        self.view.addSubview(resultLabel)
        
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

f:id:gawao:20150330003821j:plain f:id:gawao:20150330003833j:plain


ここまでで大体機能は出来たので、細かいところを変更

修正点

結果画面から姓名診断画面に戻った時に名前が入ったままなので消す

姓名診断画面を表示した時にテキストフィールドにフォーカスをセットする

参考

UITextField、UITextViewのフォーカス制御 - iOSアプリ開発トピック

ViewController.swift(姓名診断画面)

    /*
        Viewが表示される直前に行う処理
    */
    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        // 名前入力テキストフィールドを空にする
        nameField.text = ""
        // 名前入力テキストフィールドにフォーカスする
        nameField.becomeFirstResponder()
    }

キーボートのreturnSendに変える

参考

UITextField/UITextViewの文字入力で覚えておくと便利なこと

ViewController.swift(姓名診断画面)

override func viewDidLoad() {
// 〜省略〜
        // キーボードのReturnキーをSendに変える
        nameField.returnKeyType = UIReturnKeyType.Send
        // Viwに追加する
        self.view.addSubview(nameField)
// 〜省略〜
}

結果画面を表示したときに姓名診断画面の「テキストフィールドとボタン」が少しの間表示されているので消す

こんなやつ

f:id:gawao:20150330004040g:plain

ResultViewController(診断結果画面)

    /*
    Viewが表示される直前に行う処理
    */
    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        // TODO viewの背景色を設定
        // これで前の画面の残像(テキストフィールドとボタン)は消えたけど・・・??
        self.view.backgroundColor = UIColor.whiteColor()
    }

f:id:gawao:20150330004114g:plain

残像が消えたようだけどこれでいいのか・・・??

完成

画面

f:id:gawao:20150330004147g:plain

コード

iOSで姓名診断アプリを作る swift版


やりたいことは出来ましたが、何だかスッキリしない(>_<)

storyboardを使わずにiOSでおみくじを作る

ドットインストールの以下のレッスン

dotinstall.com

を、storyboardを使わずにswiftのみで作ってみる。

storyboardを使わないプロジェクト作成

を参考にして作成。ありがとうございます。

  • Single View Applicationを選択してプロジェクト作成
    • プロジェクトの設定ファイルの変更
      • Deployment Info -> Main Interface の中のMain削除
    • Main.storyboardLaunchScreen.xibを削除
    • AppDelegate.swiftapplicationメソッドにコードを追加
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    // ====↓追加=====
    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
    self.window?.backgroundColor = UIColor.whiteColor() // 背景白
    self.window?.rootViewController = ViewController() // ViewControllerを指定
    self.window?.makeKeyAndVisible()
    // ====↑追加====
    return true
}

画面に必要な部品

  • ラベル1(あなたの運勢は・・・)
  • ラベル2(フォント大きめ。おみくじの結果を表示)
  • ボタン1(クリックすると占いを実行し、占い結果をラベルに表示)

ラベルとボタンを配置してみる

参考

001 UILabelで文字を表示 - Swift Docs

007 UIFontで文字を装飾 - Swift Docs

002 UIButtonでボタンを表示 - Swift Docs

感謝。

f:id:gawao:20150327150555j:plain

ボタンをクリックした時の処理を追加

ボタンをクリックした時にコンソールに出力するようにしてみる

// イベントを追加する
divineButton.addTarget(self, action: "onClickDivineButton", forControlEvents: .TouchUpInside)
 

/*
    占うイベント
*/
func onClickDivineButton(sender: UIButton) {
    println("onClickDivineButton: ")
    println("sender.currentTitle: \(sender.currentTitle)")
}

ボタンをクリックしてみるとエラーが(ヽ'ω`)・・・??

MyOmikujiSwiftOnly[12918:4911213] -[MyOmikujiSwiftOnly.ViewController onClickDivineButton]: unrecognized selector sent to instance 0x7fdba25bdeb0
2015-03-27 11:24:26.043 MyOmikujiSwiftOnly[12918:4911213] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[MyOmikujiSwiftOnly.ViewController onClickDivineButton]: unrecognized selector sent to instance 0x7fdba25bdeb0'

メソッド指定時にコロン:が付いていなかった!!

// メソッド指定にコロンを追加
// イベントを追加する
divineButton.addTarget(self, action: "onClickDivineButton:", forControlEvents: .TouchUpInside)
onClickDivineButton: 
sender.currentTitle: Optional("占った!")

成功!!

適当に装飾

  • Labelの背景色
  • 枠線、角丸、フォントサイズ
  • ボタンの背景色、角丸

f:id:gawao:20150327150958j:plain

完成

f:id:gawao:20150327151053g:plain

ソースコード

はまったところ

  • storyboardを使わずにプロジェクを作る方法がわからなかったので検索していくつか試した。時間かかった
  • 乱数を取得し、その数でenumから値を引っ張ろうとしたがやり方がわからずなかなかうまくいかなかった

storyboard使わないと位置の調整とか大変そう。
使ったら使ったで、複雑になってくると大変なのかな。。。
enumとか上手く使えるようになりたいです。
少しずつ作っていってコツを掴んでいきたい所存です。