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

MENU

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

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

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

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

カメラアプリに挑戦!

今回は『iOSの教科書』の最後を飾るアプリ、カメラアプリの「パイル」に挑戦です。

カメラアプリは携帯端末と非常に相性がよく、工夫を凝らしたさまざまなアプリがマーケットにあふれています。多機能なものやニッチなものなど、それらはスマホの可能性を大きく広げてくれています。

今回のパイル・アプリは撮った写真をどんどん合成して行く、単機能ながら凝ったアプリです。ここで画像合成を学ぶことによってまた新たな可能性を思いつくかも知れません。カメラアプリ入門編として実に適切な題材になっています。

もうここまで続けてきた方にとっては、余計な前書きよりプログラム入力の方が待ち遠しいはずですね。さっそくアプリ制作に入って行きましょう!

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

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

12.1 パイルの概要

掲載されている画面デザインイメージはiOS6以前のもので、今回のiOS7版ではツールバーの見た目、アイコンデザイン等が異なる。

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

3.プロジェクトにImagesフォルダを追加する方法は今までと同じ。ダウンロードした素材フォルダの「12 Pile」フォルダの「Images」フォルダをプロジェクトに加えれば良い(第6章「6.1 ビュー・アイテム画像の作成」を参照)。

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

1. Pile-Info.plistはプロジェクト・ナビゲータの「Pile」→「Supporting Files」の中にある。

2. 新しい項目を追加する際には、最下行の項目名のところにポインタを合わせると「+」「-」ボタンが現れるので「+」ボタンを押すことによって行が追加される。

3. iOS7からはステータスバーが透明であることが基準になっているので、ここではステータスバーの色は変えない。代わりにビューの背景色(黒)で文字が見えるように文字色を白にするが、これはPile-Info.plistで文字色を変えるのではなく、後ほどプログラムコードで記述する。ここではプログラムでステータスバーの属性を変えられるようにする。

キーの一覧から「Status bar style」ではなく、代わりに「View controller-based status bar appearance」を選択する。

図. Pile-Info.plistで新たに「View Controller-based status bar appearance」行を追加する。

4. Valueを「NO」にする。

図. Valueを変えるときは右端の三角形マークをクリックする。

5. 「PileViewController.xib」の代わりに「Main.storyboard」を開く。

7. 〜8. この作業は不要。

10. この作業の後シミュレータで動かしてみると、ステータスバーの表示が消えてしまう。これはステータスバーの文字色がデフォルトの黒、ビューの背景が黒、ステータスバーが透明である、という3点による。ここではプログラムコードで文字色を白にする。

PileAppDelegate.mの- (BOOL)application:メソッドに以下の1行を挿入する。

application.statusBarStyle = UIStatusBarStyleLightContent;

図. PileAppDelegate.mのapplication:メソッドでステータスバーの文字色を白にする。

15. 「Black Opaque」の代わりに「Black」を選ぶ。

16. Bar Button Itemをツールバーに3回ドロップすると、左寄せになるので、この後の作業でFlexible Spaceを間に挿入することになる。

図. Bar Button Itemを3回ドロップすると4つのアイテムが左寄せに並ぶ。

20. アイコン画像のファイル名は左のアイコンから以下の通り。

  1. Save.png
  2. PhotoLibrary.png
  3. Camera.png
  4. Clear.png

図. iOS7ではこのような表示になる。

24. 教科書の値は3.5インチiPhoneのもの。4インチiPhoneではYを「72」程度に変更するとおおよそ中央に配置できる。

12.5 アウトレットやアクションの宣言と接続

1. アシスタント・エディタを開いた時に右半分にPileViewController.hが表示されなかった場合の対処方法は、連載1回目の「5.3 アウトレットとアクションの宣言と接続」の2. の部分を参考にする。

12.6 イメージ・ピッカーの処理

8. IBAction「openCamera:」メソッドは、アシスタント・エディターでのひも付けにより既に枠組みだけ用意されている。メソッドの中身のみ追加する。

また、ソースコードの最後の行、

[self presentModalViewController:imagePicker animated:YES];

のpresentModalViewController:メソッドはiOS7ではdeprecated(非推奨)である。代わりにpresentViewController:メソッドを用いる。

[self presentViewController:imagePicker animated:YES completion:nil];

と書く。

このソースコードの後に「写真アルバムを開くopenPhotoLibrary:メソッドも、ソース・タイプの指定が異なるだけで同じ処理になる。」と教科書に書いてあるが、これは既に枠組みだけ用意されているIBAction「openPhotoLibrary:」メソッドに対し、「openCamera:」メソッドと同じ内容を書け、ということ。以下のようになる。

- (IBAction)openPhotoLibrary:(id)sender {
// イメージ・ピッカーのソース・タイプを写真アルバムに設定
imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
// イメージ・ピッカーを開く
[self presentViewController:imagePicker animated:YES completion:nil];
}

9. cameraButton.enabledとphotoLibraryButton.enabledはそれぞれ先頭に「self.」か「_」を付加しないとエラーになる。なお、現時点ではiOS7が動く機器でカメラを利用できない機種はないが、将来にはどのようなデバイスが登場するかわからないので、ここではカメラ利用の可否を判断する処理を残しておく。iOSシミュレータではカメラは利用できないので、カメラボタンは利用できない。

12.7 画像の合成処理

4. ソースコードの

[self dismissModalViewControllerAnimated:YES];

のdismissModalViewControllerAnimated:メソッドはiOS7ではdeprecated(非推奨)である。代わりにdismissViewControllerAnimated:メソッドを用いる。

[self dismissViewControllerAnimated:YES completion:nil];

と書く。

5. imageView.boundsは先頭に「self.」か「_」を付加しないとエラーになる。

6. 上に同じくimageView.imageは先頭に「self.」か「_」を付加しないとエラーになる。

7. 同上。3つあるソースコードのうち後の2つは参考のソースコードなのでここで追加入力する必要はない。後ほど別のデリゲートメソッドに書く。

12.8 アラートの表示と処理

2. このソースコードを書く場所は

UIImagePickerController *imagePicker;

行の直後。

5. ソースコードの後に「消去確認のアラートも同じようにインスタンスを作り、プロパティ等を設定する。」とあるが、以下のソースコードを追加すれば良い。

 // 消去確認アラートの生成と初期化
clearAlert = [[UIAlertView alloc] init];
clearAlert.title = @"Clear Image"; // タイトルの設定
clearAlert.message = @"Are you sure ?"; // メッセージの設定
clearAlert.delegate = self; // デリゲートの設定
[clearAlert addButtonWithTitle:@"Cancel"]; // ボタンの追加
[clearAlert addButtonWithTitle:@"OK"]; // ボタンの追加

6. 2つのIBActionメソッドは、アシスタント・エディターでのひも付けにより既に枠組みだけ用意されている。メソッドの中身のみ追加する。

8. 前述の通り、imageView.imageは先頭に「self.」か「_」を付加しないとエラーになる。

9. この方法でも自動的にSafariで画像を開くことになるので、続いて11. の作業を行えば良い。iOSシミュレータでホームボタンを押すには「ハードウェア」メニューから「ホーム」を選ぶ。またはCommand + Shift + Hキーのショートカットを用いる。

12.9 メモリ不足時の対応

2. このメソッドはテンプレートに既に存在しているので、その中身のみ追加する。

12.10 ビューの自動回転

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

12.12 パイルのソースコード

完成したソースコードにおいては、Xcode5のテンプレートでは存在しないコードや、iOS7では無効のメソッドも書かれているので注意が必要。これまで教科書通りに進めた時に特に書かなかったソースコードをここで追加する必要はない。

 

ついにカメラアプリ「パイル」の完成です。ですが撮影機能は実機に転送しないと確認できません。実機に転送するにはApple社の「iOS Developer Program」に参加して開発用証明書を取得しなければなりません。「iOS Developer Program」への参加方法は教科書の第3章「iOS Developer Programへの加入」に、古い情報ではありますが掲載されています。しかし証明書の取得に関しては教科書では秘密保持契約の関係で詳しくは触れていません。Apple社の公式ドキュメントを参考にしてなんとかクリアして下さい。

Apple公式ドキュメント「アプリケーションの配布に関するガイド

開発者証明書が取得できれば、あとは教科書の第6章「カウンターの発展」の「6.9 デバイスの実行」の8. 以降の手順を参考にすれば良いでしょう。少し古い情報ですが、キーワードを頼りに操作を確認すれば大丈夫でしょう。途中苦労するかも知れませんが、実機に転送できたときの喜びは格別です。

今まで7回にわたり、6つのアプリを作ってきました。Objective-C言語の文法にはとりあえず目をつぶって、ひたすら書いてある通りにソースプログラムを入力してきたことと思います。『iOSの教科書』ではこの後ついにObjective-C言語の基本的な文法の解説に入って行きます。Objective-C言語の元となっているC言語の基礎から学んで行きます。プログラミングが初めての人にとってはこの順番が良いかと思います。Objective-C言語自体はなかなか手強い存在です。用語の意味などが自習者にとってしばしば壁として立ちはだかり、Objective-Cの勉強はともすれば挫折感との闘いになりがちです。

この闘いに勝てるとすれば、やはり闘う前に知るものづくりの達成感というごほうびがあってこそです。アプリを作るのはすごく楽しい、でもオリジナルのアプリを作るためにはどうしてもObjective-C言語を理解しなければならない、よし、なんとしても理解してやるぞ! そういったモチベーションがプログラミングに縁のなかった人たちの背中を押してくれるのだと思います。

ここまでたくさんソースプログラムを入力してきた人にとって、第13章「C言語」以降に時々出てくるバージョンの違いは、もうなんとか自力で乗り越えることが出来ると思います。ひたすら基礎からみっちり教科書を読んでたっぷり実践してみましょう。

この連載もいよいよ終わりです。ということは『iOSの教科書』もいよいよ終わりまで来たということです。やはりここは最終章「おわりに」に注目していただきたいです。非常に印象深い文章です。この中で「B.i.」「A.i.」という言葉が出てきますが、私にとっとはさしづめ「iOSの教科書以前」と『iOSの教科書以降』という感じです。それほどこの本との出会いは大きかったのです。みなさんも是非良い出会いをして下さい。それが情報端末であれ、書籍であれ、人であれ、たとえ小さいできことであっても長い人生に決定的な変化を与えるかも知れないのです。そう、今身近にあるそれかも知れません。

オススメ記事一覧

もっと見る
完全無料!

1で登録完了!

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

今すぐ新規会員登録
Page Top