あたっちむーびーさんからの質問を受けて、
答えてズンズンをやって早1週間。
答えてズンズン!:XcodeのインデントとIBのロック
『週明けまでいましばらくお待ちくださいね。』
と軽やかに締めくくって放置しておりました。
ネタがいろいろあったとは言え、こんなに放置するのはちょいとおかしいと感じたアナタ。
大正解。
実はこの1週間、暇を見つけてはずーっと配列をいじっていたわけです。
ところが。
やればやるほどハマっていく泥沼の展開。
結局1週間引きずったものの、スマートな解法まで至りませんでした。
タダの配列なのに。
他の言語のパターンでゴリ押ししてしまう癖が抜けてない
=この言語の基礎が身体に定着していないってわけです。
困った状況なのですが、
とりあえず基本中の基本の部分は形にしてみましたので。
まずはコレを使って勉強しましょう。
注意事項は毎度同じです。
その1 コレをそのまま売らない
その2 コレが原因でiPhoneやtouchが壊れても文句を言わない
その3 バグがあったら「速やか」且つ「優しく」連絡する
その4 ヘッダーコメントは消さない
今回は「なんとか形にしてみました」程度ですので、
いずれきっちりしたモノを再リリースします。したい。なんとか。
ダウンロードして、Xcodeで開けて、ビルドして進行していただくと、
基本画面はこのようになっています。
コードの中に2つの配列が入っています。
array1 ラベル用のテキストを格納している配列
array2 ピクチャー用のオブジェクトを格納している配列
Objective-Cでは、配列として2つの型を持ってまして、
・中身を途中で変更できないタイプのNSArray型
・中身を途中で変更できるタイプのNSMutableArray型
この2つを、必要に応じて使い分けていくわけですが。
今回はどちらもNSArray型の配列を使っています。
配列の内容は最初から決まっていますので。
切り替えボタンを押すと、
コードの中に仕込んである配列から各々データを取得して、
・テキストラベルの中身を変更
・各ピクチャーはアニメーションや画像切り替えを実行
という順番で処理をしていきます。
※コードが不必要に長く読みにくくなるので「元に戻す機能」は入れていません。
※もう1回動かすときには、アプリの再起動をお願いします。なんてイケてない…(ToT
配列の仕込みはこんな感じ。
// 配列その1 : テキストを格納する配列
array1 = [NSArray arrayWithObjects:@”消える”,@”拡大”,@”縮小”
,@”回転”,@”透明”,@”移動”,@”切替え”,@”切替え”,@”切替え”,nil];
// 配列その2 : イメージオブジェクトを格納する配列
array2 = [NSArray arrayWithObjects:image1,image2,image3
,image4,image5,image6,image7,image8,image9,nil];
最後に「nil」つまり「null」を指定することで「配列はここまでよ」という指定になります。
使うときはこう。
// 配列の中身(テキスト)をラベルに
label1.text = [NSString stringWithFormat:@”%@”,[array1 objectAtIndex: 0]];
// 配列の中身(オブジェクト)を変数の中に
UIImageView *tempImage1 = [array2 objectAtIndex: 0];
大事なのは [array1 objectAtIndex: 0] の部分で、
配列の中の配列番号(インデックス)を指定して対象を引っ張り出します。
インデックが0から始まるというのは一般的な配列と同じです。
forループはこの「0」の部分(インデックスを指定する部分)に仕込めばOKですね。
で。
こうなると当然欲しくなるNSMutableArray型のサンプル。
ございますか?
ございません。
なるべくわかりやすく勉強できるサンプルを作ろうと、
あっちこっちの機能に手を出していく中で、いい加減スルーできなくなりました。
こりゃ相当ガッチリ基礎固めしないと面白く伝えるのは厳しいと。
特にObjective-C。
そこで。
【次週のお知らせ】
次週1週間(12月14日~12月18日)、
サルできは「過去記事アーイェー週間」と称しまして、
みなさまがうっかり見落としたかもしれない記事を再放送でお届けします。
そして私はその1週間で、
全米で最も売れているプログラミング書籍なるものを1冊叩き込み、
再来週から「サルにもできるiPhoneアプリの作り方 R」として、
みなさまにさらにわかりやすい内容でお届けできるよう頑張ります。
あたっちむーびーさん。
そういうわけでもう少しお待ちください。