• ログインログイン
  • 新規登録新規登録

MENU

初めての言語がObjective-Cでも大丈夫! Xcode5ではじめてのiOS7プログラミング 第4回

連載初めての言語がObjective-Cでも大丈夫! Xcode5ではじめてのiOS7プログラミング

プログラミング未経験の初心者からでも始められる、『iOSの教科書』を題材にしたiPhoneアプリ開発コラムです。アプリをとにかく作ってみたいけれども、何をやればいいのかよくわからない。そのような学生にピッタリのコンテンツです。

前回までのプログラミング学習コラムに続き4回目の勉強内容です。

スマホの機能をフルに活用!

スマホのハードウェアの進化はとどまることを知りません。今回誕生したiPhone 5sは64ビットCPUを積んでいて、コンピュータとしてのハードウェア性能は約3年前のMac miniに引けを取らないそうです。少し前の高性能パソコンの機能があんな小さいスマホに凝縮されているのです。

さらに言えば最新のiPhone 5sにはパソコンにないモーションセンサーやGPS機能、高性能カメラ、長時間稼働可能なバッテリーなどを積んでいるのですから、もう驚くほかありません。せっかくですからこれらの機能を生かしたアプリも作っていきましょう。

今回は加速度センサーを使って、ボールが転がらないようにバランスをとるゲームを作ってみます。『iOSの教科書』第9章「バランス」アプリです。

さてその前に、今回からこの連載記事を読み始めた方もいらっしゃるかも知れませんし、この記事の成り立ちについて少し触れてみたいと思います。早くバランスアプリを作りたい方は、もちろん遠慮なく読み飛ばしてしまって下さい。

ちょっと自己紹介

ここで少し自己紹介をさせて下さい。

中川 聡 (なかがわ さとし)

80年代にパソコンに出会い、ゲーム音楽・CM音楽の制作、COBOLプログラマ、汎用コンピュータの顧客向けOS教育インストラクタ、新入社員向けコンピュータ研修インストラクタ等を経験後、現在日本電子専門学校専任講師(2013年10月現在)。

Twitter:nakasen_20th
GitHub:nakasen
SlideShare:satoshinakagawa543
LPICレベル3「Specialty」
CCNP
DTPエキスパート

専門学校で教えてはいますが、専門というものはありません! プログラミングを教えているのに、持っている資格はLinuxにネットワークにDTP。まさに雑食です。いろんな経験をしているので、失敗談とか話し始めたら止まりません。

外部の活動では、LPI-Japanさんの主催する「LPIC&OSS-DB勉強会」のチューターを時々務めておりますので、勉強会に参加されればお会いできるかも知れません。でも先日チューターとして質問に来た方に答え始めたら話が止まらなくなってしまい、他のチューター2名の方を巻き込んで質問の内容以上にLPIC受験対策全体の大きな話になってしまって質問者の方を困惑させてしまいました。話が止まらないのは私の弱点です。

雑食ゆえ、ふだんWindowsとOSXとLinuxを同じくらいの割合で使っているという、かなり珍しいパソコンの使い方をしています。ですが、スマートフォンについてはiOS一辺倒です。

再び「iOSの教科書」の素晴らしさ

連載第1回目で『iOSの教科書』とその前身の『iPhoneの教科書』について少し触れましたが、もう一度この本の素晴らしさを訴えてみたいと思います。この本はある意味私の人生を変えてしまいました。人生の中で一冊の本が大きな転機を与えることがまれにあると思いますが、私の場合、この本がまさにそうでした。

私は前述の通り専門学校で様々な技術を学生に紹介する立場にありますが、少し前までオープンソースプロダクトであるLinuxを中心にサーバ構築を教えていました。さらにその前はWebデザインの分野を担当していました。どちらも多少はプログラミングに触れる必要があり、そういった授業も担当はしていたのですが、積極的に自分のプログラムを作る気にはなれませんでした。かつてプログラマであったにもかかわらず、です。

それは雑食ゆえの悲しさで、次々と新しい技術を学んでいくとアイディアはどんどん浮かぶのですが、じっくりと腰を落ち着けて何かを作り出そうという気にならないのです。ものづくりというのは時間のかかる作業です。ゼロから何かを生み出すにはまとまった時間がどこかで必要になるので、そういう時間をとれなければ良いアイディアが浮かんでも結局完成しないまま放置されてしまいます。

そんなある年の暮れに『iPhoneの教科書』に出会ったのです。iPhoneアプリにはもちろん興味があって、でも時間がかかるんだろうなあ、結局途中で投げ出しちゃうんだろうなあと横目で眺めていたのですが、ちょうどいい具合に正月休みを前にしてものづくりの観点からアプリ制作に導いてくれる本に出会い、正月の間脇目も振らずにアプリづくりに取り組めたのでした。

初めて実機転送できた時の感激は忘れられません。実は当時実機転送に必要な開発者登録の作業においてApple側のサーバに問題があり、Appleサポートの方と直接電話でやり取りしなければ登録ができなかったのです。Appleサポートも当然正月の頃は担当者が休みを取っていたりするので手続きがなかなか進まずイライラしたのですが、なんとか登録が終わって実機転送後アプリが動いた瞬間、なにか目の前に一本の道がすーっと伸びていったのを見たような気がしました。自分のものづくり魂に火がついた瞬間だったのかも知れません。

スマホのアプリを自分で作れる、と思った瞬間が自分の人生すら変えてしまうかもしれない、そんなことはあるのでしょうか? だいいちまだ一本もApp Storeに登録していないのに、いや、まともなオリジナルアプリはまだ一本も作っていない状態で、です。

人は可能性を感じた時に大きな変化を迎えるのではないでしょうか。ちょっと長いですが、私が共感したコラムを紹介したいと思います。

「週刊アスキーPLUS」サイトより、元「月刊アスキー」編集長、現角川アスキー総合研究所の遠藤諭氏による「ジョブズはパーソナルコンピュータそのものだ!」というコラムです。

スティーブ・ジョブズ氏死去の際に追悼文として書かれたコラムの中で、遠藤氏はまずロジャー・L・サイモンの小説『カリフォルニア・ロール』(“California Roll”、Roger L. Simon)からある文を紹介しています。

———————————————————————————————————————————-

アップルをモデルにしたコンピュータメーカーが出てきて、米西海岸やアキハバラなどを舞台にストーリーは展開するのだが、その中に以下のようなくだりがある。

「チューリップⅠとIIはデスクの上にのる小粋な代物で、たとえ、誰もそいつの操作方法を知らなくて、書斎に箱ごと放っておかれたり、ほとんど使われなくても、アメリカに革命をもたらしたのだ」(木村二郎訳,早川書房刊)

この中に出てくる「チューリップ」というのが、アップルを最初の成功に導いた「Apple II」という8ビットマシンのことである。この小説が書かれたのは、1985年で、初代Macintosh(現在のMacの先祖にあたるマシン)がデビューした翌年にあたる。この中の「書斎に箱ごと放っておかれても(!)アメリカに革命をもたらした」というくだりが、私は猛烈に好きなのだ。

———————————————————————————————————————————

遠藤氏はその「猛烈に好き」な理由を印象深い語り口で教えてくれます。

———————————————————————————————————————————

そして、これほどパーソナルコンピュータの本質的な価値を言い当てているものはないといまでも信じている。コンピュータというのは“動かしてナンボ”のものだとほとんどの人は思うだろう。しかし、本当は違うのだ。「この機械で自分も何かできる」という“勇気”を持つことができることが、パーソナルコンピュータの最大の価値なのである。

世の中のしくみの中に組み込まれ、誰もが没個性的になっていき、ともすれば自分の限界を感じてしまう。そういう日常の中で、コンピュータを1台買って、プログラムを書く、何かの計算やクリエイティブなことをする。それによって、「自分もスターになれる!」そう思えて表情が変わり、脳みそが活性化して生活も考えも前向きになれる。

それが、マイクロエレクトロニクスという無血革命の革命たるゆえんなのである。

———————————————————————————————————————————

「箱ごと放っておかれ」たコンピュータが革命をもたらす、そんなことはあるのか、いや、しかし実際に起きたじゃないか、遠藤氏の熱い語り口で、私もそう信じることができました。とても印象的な追悼文です。

私も80年代にMacintoshに出会って、これで音楽を自分で作ることができる、という可能性を見いだしました。そして21世紀に入りiPhoneを使うようになり、ある日「iPhoneの教科書」に出会ってスマートフォンのアプリに無限の可能性を見いだすことができ、その瞬間に人生が変わってしまった。

それ以来私は積極的にプログラムを自作するようになりました。それまでは教えるための教材としてしかプログラムに触れていなかったのですが、アプリを自作するようになるととにかく時間を必要とするので生活がすっかり変わってしまったのです。多くの人に会いに行き、アイディアの交換を行い、一人の時間はカフェやコワーキングスペースに入り浸ってひたすらコーディング、それまでと時間の使い方がガラッと変わってしまいました。ソースコードやノウハウを公開すると反響があるので、流行のSNSは全面的にその対応に使っています。

一冊の本との出会いが人生を変える、そんな体験談でした。かなり脱線してしまいました。この本への想いを少しでも感じていただければ幸いです。

さあ、やっと本題です。どんどんアプリを作って行きましょう。

ハードウェアの機能を生かす

今回はiPhoneの加速度センサーの機能を生かした「バランス」アプリです。ゲームですが実にシンプルです。ゲームとしては物足りなく感じるかも知れませんが、よく考えてみるとこのアプリを自作できるならいくらでも応用が効くことがわかります。例えば画像を差し替えるだけで簡単に水準器を作れます。

iOS7のコンパスアプリでは水準器のモードがありますが、同じ機能を持ったオリジナル画像の水準器アプリだって作れるし、もっと多機能な水準器だって作れるはずです。「バランス」アプリはとってもシンプルなアプリなのに実機に転送した時なぜかニンマリとしてしまうと思います。きっと大きな可能性を手にしたからでしょう。

とにかくまずはこの加速度センサーの基本的な機能を使えるよう、教科書をしっかり実践していきましょう。

iOSの教科書』の実践!(Xcode5、iOS7対応版)

以下、第9章の補足項目です。今まで同様電子書籍版をベースにしているので、ページ数が無意味になります。項目の番号で参照して下さい。

9.3 画像とプロジェクトの作成

3. プロジェクトにImagesフォルダを追加する方法は今までと同じ。ダウンロードした素材フォルダの「9 Balance」フォルダの「Images」フォルダをプロジェクトに加えれば良い(第6章「6.1 ビュー・アイテム画像の作成」を参照)。またここで触れられているステイタス・バー非表示の作業は、スマッシュの時と同様に不要である。

9.4 ビュー・アイテムの作成

1. 「BalanceViewController.xib」の代わりに「Main.storyboard」を開く。
18. Heightの値は「480」とあるが、これは3.5インチiPhone(iPhone 4、4S)の場合の値。4インチiPhone(iPhone 5、5s、5c)の場合はHeightは「568」に設定する。
19. Alphaの値はAttributesインスペクタで設定する。

9.5 アウトレットの接続

1. アウトライン・ビュー(Xcode5では「Document Outline」)のボタンは画面が狭い場合に見えなくなることがある。対処方法は連載1回目の「6.2 イメージ・ビューの作成」の7. の部分を参考にしてボタンを表示する。また、アシスタント・エディタを開いた時に右半分にBalanceViewController.hが表示されなかった場合の対処方法は、同じく連載1回目の「5.3 アウトレットとアクションの宣言と接続」の2. の部分を参考にする。

9.6 加速度センサーの処理

2. ここで書かれているUIAccelerometerクラスのオブジェクトはiOS7では非推奨となっているが実行は可能である(非推奨の方法を使うとApp Storeの審査でリジェクトされる)。代替方法については後述。

図. UIAccelerometerクラスはdeprecated(非推奨)。実行は可能である。

図. 非推奨のクラスを使おうとすると補完の際に赤線が入るが、入力は可能。

なお、UIAccelerometerクラスを用いる場合はこの2. の作業の前にBalanceViewController.hの@interface行に以下の記述を追加する必要がある。

図. BalanceViewController.hに<UIAccelerometerDelegate>を追加する。

この作業は教科書では後で(7. の部分で)行うことになっているが、先に行うことでデリゲートメソッドを入力する時に補完が効き、入力ミスを減らすことが出来る。

7. この作業は上記の通り既に2. の部分で行われている。デリゲートメソッド記述の前にプロトコルの追加を行えば補完が効き(非推奨なので赤線は入るが)、入力ミスを減らることができる。

9. 最終行の[self move]; はエラーになるが、moveメソッドはこの後追加するのでここではエラーを気にせず先に進める。

 9.7 ボールの移動

4. 最終行のball.centerはエラーになる。_ball.centerまたはself.ball.centerに修正する(連載1回目の「5.4 アクションの定義」を参照)。
8. positionYの値は、3.5インチiPhone(iPhone 4、4S)の場合は教科書通り240.0、4インチiPhone(iPhone 5、5s、5c)の場合は284.0を指定する。

9.8 シミュレータ用のコード

3つのソースコードのうち最初のソースコードは入力する必要はない。2番目のソースコードはviewDidLoadメソッド内に書く。3番目のソースコードは@endの直前に書けば間違えにくい。書く場所がわからなければ「9.15 バランスのソースコード」を参考にして入力する。

 9.9 ボールの衝突処理

最初のソースコードは入力する必要はない。2. から入力する。

2. 最終行の[self bump]; はエラーになる。bumpメソッドは後で追加するのでそのまま続ける。

3.[self bump]; のエラーについては上記の通り。コメント「ボールと下側のフレームとの衝突判定」の部分では画面下部のフレーム座標を判定してるので4インチiPhoneの場合はpositionYの計算方法が違う。

3.5インチiPhoneの場合 positionYの比較、計算値・・・400(教科書通り)
4インチiPhoneの場合 positionYの比較、計算値・・・488

図. iPhoneのサイズによって画面下部の衝突判定のし方が違う。

本来はiPhone 4以降の全ての機種に対応できるようにアプリを作るべきである。具体的にはアプリ内で機種判定を行って処理を振り分ける。今回は入門編なので、自分の持っている実機に合わせてコメント行を入れ替えて実行する。

9.10 透明度のアニメーション

2. flash.alphaはエラーになる。_flash.alphaまたはself.flash.alphaに修正する。

9.11 効果音の再生

1. オーディオ・ファイルは既に用意されている。ダウンロードした素材フォルダの「9 Balance」フォルダの「Sounds」フォルダをプロジェクトに加えれば良い。

2. プロジェクトへの登録方法はImagesフォルダの場合と同じ。

3. フレームワークの追加方法は教科書第7章「7.11 フレームワークの追加」を参考にする。

6. 書く場所がわからない場合は、「9.15 バランスのソースコード」を参考にして入力する。

9.13 ビューの自動回転

2. 今までと同様、このメソッドは無効。この作業は飛ばす。

5. 今までと同様、この部分はアイコンではなく、チェックボタンになっている。

以上でひとまずバランスアプリの完成です。が、UIAccelerometerクラスという非推奨の方法を使っているのは気持ち悪いかも知れません。現在ではCore Motionというフレームワークを使って加速度センターの値を取得するので、この方法を用いたソースコードを以下の場所からダウンロードできるようにしておきました。旧来の方法もコメントとしてソースコードを残してあるので、比較してみると勉強になると思います。ついでと言っては何ですが、ひとつのソースコードで3.5インチiPhoneと4インチiPhoneの両方にも対応してみました。Auto Layoutという機能を使っています。Constraintsというオブジェクトを駆使すると、異なる解像度の画面レイアウトが簡単にできるようになります。

ダウンロード

この画面の右下にある「Download ZIP」ボタンを押すと、プロジェクト丸ごとダウンロードされます。

さて次回は「クロック」アプリです。いよいよ実用的なアラームクロックを作ります。応用範囲も広いので、また可能性がどんどん広がって行きます。楽しみですね。

オススメ記事一覧

もっと見る
完全無料!

1で登録完了!

エンジニアの仕事・年収や選考ノウハウ記事が読めるほか、
会員にはプログラミング講習やES・面接対策などリアルな無料サポートも充実。
ここだけの求人情報も多数。

今すぐ新規会員登録
Page Top