こんばんわ。

前回作ってた電卓をうらでポチポチ改造しながら、

どうやってiphone開発の勉強をしていこうかなーと思いながら、

やっぱり、いろんなサンプルを見ながら真似して、少しアレンジして、あーしてこーして

やってくのがいいなーと。

iPhoneってやっぱり画面の動きが楽しいからいろいろ試したくなりますねー。

画面をスルーーーっとスライドさせたり、ペラッとめくったり、チョンっとはじいてみたり、拡大、縮小、傾けたりと、ほんと直感的。

一通りそれらを使ってみたいなぁと思ってますー。
せっかく手に入れた本もありますしね。

http://developer.apple.com/jp/iphone/library/japanese.html

でiPhoneのさまざまなドキュメントが手に入りますよ。

バグったときの記念撮影↓
$無知の状態からiPhoneアプリ開発に挑んでみる-6-8-1


にほんブログ村 携帯ブログ iPhoneへ
にほんブログ村


こんばんは、

一応、電卓として動くのは完成しましたよ。
(いろいろと制限つきですが・・)

簡単にアルゴリズムのご説明をいたしますよ。

ボタンは

① C(クリア) 押した
② 0~9(数字) 押した
③ =(イコール) 押した
④ +-×÷(記号) 押した
⑤ +/- 押した

の種類があって入力に使います。

表示は
⑥ ディスプレイ(メインのおっきいの)
⑦ サブディスプレイ(右下の中くらいの)
⑧ 小ディスプレイ(左下の正方形の)

小数点(.)は前回宣言したとおり、使わないことにしますww


$無知の状態からiPhoneアプリ開発に挑んでみる-6-7-1

①~⑤の入力で⑥~⑧にどのように表示させてるかですが、こんなふうにしてみました。

 ① 問答無用で、全ての表示部分をクリアする。
 ② 小ディスプレイに何もなければディスプレイに、何かあればサブディスプレイに
   入力済みの数字に10を掛けて押された数字を足す。
 ③ ディスプレイとサブディスプレイの値を小ディスプレイの方法で計算して、
   ディスプレイの値として表示する。
 ④ 小ディスプレイを押された記号に表示する。
 ⑤ ディスプレイの値にマイナスをつける。

この項目だけで出来ています。この電卓。

まず「~.h」に内部的に保存しておく変数と、イベントハンドラの宣言?をボタンの数だけ用意してます。


@interface CalculatorViewController : UIViewController {
    IBOutlet UILabel *lblKeisanKekka;
    IBOutlet UILabel *lblMessage;
    IBOutlet UILabel *lblSub;
    int display ; 
    int subDisplay;
    int ope;//+:1 -:2 *:3 /:4
}

-(IBAction)actionButtonClearTapped:(id)sender;
-(IBAction)actionButton1Tapped:(id)sender;
-(IBAction)actionButton2Tapped:(id)sender;
-(IBAction)actionButton3Tapped:(id)sender;
-(IBAction)actionButton4Tapped:(id)sender;
-(IBAction)actionButton5Tapped:(id)sender;
-(IBAction)actionButton6Tapped:(id)sender;
-(IBAction)actionButton7Tapped:(id)sender;
-(IBAction)actionButton8Tapped:(id)sender;
-(IBAction)actionButton9Tapped:(id)sender;
-(IBAction)actionButton0Tapped:(id)sender;
-(IBAction)actionButtonTasuTapped:(id)sender;
-(IBAction)actionButtonHikuTapped:(id)sender;
-(IBAction)actionButtonWaruTapped:(id)sender;
-(IBAction)actionButtonKakeruTapped:(id)sender;
-(IBAction)actionButtonPuramaiTapped:(id)sender;
-(IBAction)actionButtonEqualTapped:(id)sender;
-(IBAction)actionButtonPointTapped:(id)sender;



 *lblKeisanKekka; は、メインのディスプレイのラベルのこと
 *lblMessage; は、小ディスプレイのラベルのこと
 *lblSub; は、サブディスプレイのラベルこと。
 int display ;  は、lblKeisanKekkaの中身を保持する変数。
 int subDisplay; は、lblSubの中身を保持する変数。
 int ope;//+:1 -:2 *:3 /:4 は足し算か引き算か掛け算か割り算かを保持しておく変数。
  //より右の緑の部分はコード内のメモを書くための部分。

さいごのactionButtonPointTappedは使ってませんけど。

「~.m」に宣言したやつの中身を書きます。↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

①のクリアを押したときは、問答無用でディスプレイ部分をクリアして、
内部的に持っている変数も全部クリアしてすっきり。
クリアといっても、メインのディスプレイには0を設定してます。
-(IBAction)actionButtonClearTapped:(id)sender{
    display = 0;
    subDisplay = 0;
    ope = 0;
    lblMessage.text = @""
    lblKeisanKekka.text = [NSString stringWithFormat:@"%d",display]; 
    lblSub.text = @"";
}


②は例として「1」のボタンを押したときのコードが↓です。
このようにラベルに表示してます。
if ~ else ~ の 条件分岐の構文は他のプログラム言語でもそのままっぽかったので、
すんなりなじめました。
ここで、条件分岐している理由は、さっき上の②の説明のとおり、どっちにディスプレイに表示するの?っていうことです。

-(IBAction)actionButton1Tapped:(id)sender{
    if (ope == 0) {
        display = display * 10 + 1;
        lblKeisanKekka.text = [NSString stringWithFormat:@"%d",display]; 
    }else
    {
        subDisplay  = subDisplay * 10 + 1;
        lblSub.text = [NSString stringWithFormat:@"%d",subDisplay]; 
    }
}


④(③は後で)は例として「+」のボタンを押したときのコードが↓です。
「+」
が押された場合は中身の変数「ope」1を保存してます。

-(IBAction)actionButtonTasuTapped:(id)sender{
    ope = 1;    
    lblMessage.text = @"+"
}


⑤(③は後で)のプラマイボタンを押したとき。
数字としたときと考えは同じ。
どっちかのディスプレイに-1を掛けて表示です。
-(IBAction)actionButtonPuramaiTapped:(id)sender{
    if (ope == 0) {
        display *= -1;
        lblKeisanKekka.text = [NSString stringWithFormat:@"%d",display]; 
    }else{
        subDisplay  *= -1;
        lblSub.text = [NSString stringWithFormat:@"%d",subDisplay]; 
    }
}


③はイコールを押したときの処理です。
swirch文による条件分岐の構文です。これも他の言語と一緒ですね。
そのときの「ope」の内容で計算方法を変えてます。
ゼロで割れたら数学の世界が崩壊してしまうので、ゼロで割ろうとしたときは除外します。
最後に、メインディスプレイに結果を、サブディスプレイとか小ディスプレイをクリアして終了です。

-(IBAction)actionButtonEqualTapped:(id)sender{
    switch (ope) {
        case 1:
            display += subDisplay;
            break;
        case 2:
            display -= subDisplay;
            break;
        case 3:
            display *= subDisplay;
            break;
        case 4:
            if (subDisplay == 0) {
            }else {
                display /= subDisplay
            }
            break;
        default:
            break;
    }
    lblKeisanKekka.text = [NSString stringWithFormat:@"%d",display]; 
    ope = 0;
    subDisplay = 0;
    lblMessage.text = @""
    lblSub.text = @"";
}


ちなみにInterfaceBuilderでそれぞれのイベントハンドラとボタンとかを対応つけといてね。
青色の矢印でひっつけるだけです。以前のブログ参照!

ちなみにこの電卓の制限ですが、
まず、小数点が使えない・・・割ると、整数部分のみを表示する。
普通の電卓みたいに 記号→数字→記号→数字 と入力していっても計算されていかない。コレが結構不便。
イコールを押したときにだけ計算する。
数値が大きくなると狂う。

ちなみに特に0~9のボタンが押されたときの処理がほとんど同じにもかかわらず、同じコードを
書いてるんですね。
これを一つにまとめるようにしたいと思います。
そうしないと、上記のような制限を修正するにはちょっとしんどい。

のぉぉぉあ!!、よく見ると 3 のボタンの文字ちっちゃ!!いつからやーー。

 > 計算機その1
 > 計算機その2
 > 計算機その3
 > 計算機その4
 > 計算機その5(★この記事★)

<< 前の試練 HelloWorldを表示する

>> 次の試練 いろんなツールを使う


コレ持ってる。そこそこお勧め。
iPhone SDK Programming Manual/株式会社テクノロジックアート

Amazon.co.jp

コレほしい。でもそこそこ高い。
iPhone SDKの教科書―Cocoa Touchプログラミング、最初の一歩/赤松 正行

Amazon.co.jp



にほんブログ村 携帯ブログ iPhoneへ
にほんブログ村

こばわ。

ちょっと画面を改造してみました。


これ
$無知の状態からiPhoneアプリ開発に挑んでみる-6-5-2

最初からあった表示部分の下に、新たに大小の表示部分を作りました。

これは自分のためでわかりやすくするためですー。

何やねんこれ、といいますと、

小さいほうは「+」「-」「×」「÷」とかそういうのを表示して、

右下のはその後に押した数字を表示しようかなーと思ったのです。

実際の電卓は、たとえば「+」を押した後に数字を入力したら、元々表示されていた数字は

上書きされてしまいますよね。それを表示したままにできるという世界初の電卓ですよ。(USO)

直前の入力が何かがわかっていいと思うよね??ねっ?

実際に作っていってますが、まだメソッド(関数)の書き方がよくわからん、ので

各ボタンにほとんど同じコードを書いてる・・・。

一つにまとめたい・・。

まだまだ勉強中ーー。

ちなみにまずは小数点なしの電卓を目標につくりますーw。
(これこそ世界初か?)

えっ? 割り算どうすんねんって?

考えがあるから大丈夫。


にほんブログ村 携帯ブログ iPhoneへ
にほんブログ村

 > 計算機その1
 > 計算機その2
 > 計算機その3
 > 計算機その4(★この記事★)
 > 計算機その5