絶対に挫折しないiPhoneアプリ開発「超」入門:Chapter01〜Chapter07までのざっくりメモ


これまで何度もiOSアプリを作ろうと考え、そのたびに参考書を読んで途中挫折というのを繰り返していたのですが、絶対に挫折しないiPhoneアプリ開発「超」入門 という本を読んでみたところ、今回は挫折せずに読み進めることができました。

画面のスクリーンショットが豊富で初心者向けに書かれているのでとっつきやすくてわかりやすいです。

実際に手を動かしながら読み進めていくのは楽しいですね。

以下、本書のChapter01〜Chapter07を実際に試しながら読み進めた際のざっくりメモです。(備忘録)


  • Command+shift+n で新規プロジェクト作成
  • iOSシミュレータはoptionを押しながらドラッグすることでピンチイン・ピンチアウトができる
  • 画像を表示したい場合はシミュレータにドラッグ&ドロップしてsafari表示された画像を保存する
  • シミュレータはデバッグメニューの位置メニューで現在地を変更できる

  • 地図アプリの作成
    • MKMapViewクラス
    • Single Viewで作成
    • SummaryのLinked Frameworks and LibrariesからMapKitを追加
    • MainStoryboardに移動
      • オブジェクトライブラリボタンをクリックしてMap Viewを画面に配置
      • Shows User Location をオンにしてビルドすると地図が表示される(シミュレータだと現在位置がうまく表示されなかった)

  • NSLogとかの名前に使われているNSはNEXTSTEPに由来
    • NEXTSTEPはジョブズが創業したNeXT社が開発したOS

  • 文字列は@”〜〜〜”の形式で記述
    • 整数:NSLog(@”%d”, 1);
    • 小数:NSLog(@”%f”, 1.23);
    • 文字列:NSLog(@”%@”, @”hello”);

  • Object指向
    • クラスの追加
      • Command+nで新規ファイル追加
    • .hに定義を記述して.mに実装
    • コントローラからは #import “Animal.h” でクラスを読み込む
    • ヘッダと実装がわかれているのは実装をブラックボックス化するため
      • NSStringクラス等は実装ファイルは機械語に翻訳されたものが配布されている
    • クラス型のインスタンスの宣言
      • <クラス名> *<インスタンス名>;
      • @interface <クラス名>:<親クラス名>
      • @end
    • 親クラスは必ず指定する必要がある
    • ヘッダファイルの#importの役割は@interfaceに指定されている親クラスがどこにあるかを知らせること
    • 実装ファイルの#importの役割はこのクラスのヘッダファイルがどこにあるのかを知らせること
    • プロパティ宣言
      • @property <クラス名> *<プロパティ名>;
    • プロパティの使用
      • <インスタンス>.<プロパティ> = <値>;
    • プロパティはそのクラスの特性を表す
    • メソッド宣言
        • (<戻り値の型>)<メソッド名>;
    • メソッドの使用
      • [<インスタンス> <メソッド>];
    • インスタンスの使用
      • インスタンスを宣言
      • Animal *dog;
    • インスタンス生成(メモリ確保)
      • <生成されたインスタンス> = [<クラス> alloc];
    • インスタンス初期化
      • <初期化されたインスタンス> = [<生成されたインスタンス> init];
    • インスタンス生成と初期化はまとめて書くのが一般
      • <初期化されたインスタンス> = [[<クラス> alloc] init];
    • インスタンス使用
      • プロパティに代入してメソッド呼び出し
    • viewコントローラに関して
      • 実装ファイルにも@interfaceが存在
      • これは外部に公開したくないプロパティやメソッドを宣言したい場合に、実装ファイル内で宣言を行う
    • viewDidLoadメソッドはアプリ起動時に実行したいコードを書く

  • 実践アプリ開発
    • グラフィカルな部分の作成はストーリーボードを使用して行ったほうが効率的
    • ボタンのあるアプリを作成
      • フレームワークの追加
      • ストーリーボードの作成
        1. 素材ファイルの追加
          素材ファイルをドラッグ&ドロップすれば追加可能
        2. UIパーツの追加
        3. UIパーツの配置
          レイヤーで構造を管理
        4. UIパーツの設定
      • 接続
        1. 接続する
          ストーリーボードのUIをcontrol押しながらドラッグしてヘッダに接続する
          アウトラインビューやコネクションインスペクタから接続することも可能
        2. 接続の設定をする
          Outlet:プロパティとの接続
          Action:メソッドとの接続
          OutletCollection:???(本書では未解説)
        3. Storageはメモリ管理に関する設定、はじめのうちは意識する必要はなくデフォルトでOK

  • UIKitフレームワーク
    • UIView
      • 最も基本的なクラス
      • addSubviewメソッド:コードの中からビューの上に他のUIパーツを配置する際に使用する
      • [<ビュー> addSubview:<UIパーツ>];
      • [view addSubview:button];
    • UIImageView
      • 静止画を表示する際に使用
      • imageプロパティ:コードの中でイメージビューに表示する画像を指定する場合
      • <イメージビュー>.imageプロパティ = <画像>;
      • UIImage *anImage = [UIImage imageNamed:@”sample.png”]; // 画像インスタンスを作成
      • imageView.image = anImage; // 画像インスタンスを代入
    • UIButton
      • ユーザのタップ操作を起点にしてアプリの表示を変更する際に使用
    • UITextField
      • 編集可能な文字列を入力できる枠を作成
      • TextFieldをドラッグ&ドロップ
      • Return KeyをDoneに設定
      • TextFieldのAction設定時にTypeを「UITextField」に設定(デフォルトのidだとエラーになるので注意)
      • Did End On Exitイベントに設定しておくことで入力終了後にキーボードが隠れる
    • UISwitch
      • オン/オフのような2択選択肢を表示する
    • UISlider
      • UISwitchより細かい値を設定できる
      • スライダーの値は0.0から1.0までの小数
      • Value Changedイベントにしておくとスライダーの値が変更するたびにイベントが発生
      • スライダーから指を離した際に一度だけメソッドを呼び出したい場合はUpdate Events項目のContinuousをオフにする
    • UIAlertView
      • 警告画面を表示する
      • アラートビューのスタイルはalertViewStyleを変更することでパスワード入力、ログインフォーム等を切り替えることができる
      • アラートビューの初期化
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"title"
                                                  message:@"message"
                                                  delegate:nil
                                                  cancelButtonTitle:nil
                                                  otherButtonTitles:@"OK", nil];
    [alertView show];