「絵解きでわかる iPhoneアプリ開発超入門」の感想・忘備録

書籍「絵解きでわかる iPhoneアプリ開発超入門」のまとめ。

点数

87点

感想

かなり初歩的な内容だが、わかりやすかった。
この本の内容だけではできることは少ないが、入門書としてはいいと思う。
誤記が多いのが気になった。

Xcodeの変更点

オブジェクトライブラリ

Xcode 10からはストーリーボードを表示した際、右下にオブジェクトライブラリが表示されなくなった。
右上の+ボタン、またはShift+command+Lで表示される。

アシスタントエディタ

Xcode11からは画面右上にあったアシスタントエディタ表示ボタンがなくなった。右上の「Adjust Editor Options(左寄せのアイコン)」⇒Assistant、またはoptionキーを押しながら.swiftファイルを選択、で表示される。

部品の配置

ストーリーボード上にあるオブジェクトをControlを押しながらソースにドラッグ&ドロップする。オブジェクトのname属性はtestLabelのように名前+種類のキャメルケースにするとよい。

画面サイズの変更

画面下の「View as」で画面サイズを変更することができる。
本書ではiPhone SEを選択している。なぜなら、執筆時に出回っている中で一番小さいiPhoneだったから。
本来はAuto Layoutでレイアウトを調整するが、本書では使われてない。

絵文字の利用(画像が用意できない場合に便利)

Labelなどの表示するテキストには絵文字を使うことができる。画像を用意するのが面倒な場合は便利。

乱数生成

arc4random_uniform関数を使う。

let num = arc4random_uniform(4)
// numは0〜3

Debug View Hierarchy

アプリ実行中にデバッグエリアのDebug View HierarchyボタンをクリックするとViewの階層を確認することができる。

アニメーション

UIViewのanimateメソッドを使う。
引数としてanimations:にアニメーション中の処理、completion:に完了後の処理を渡す。

UIView.animate(withDuration: 1.0, animations: {
  self.animalLabel.transform = CGAffineTransform(scaleX: 0.2, y: 0.2) // 値をマイナスにすると反転する
,completion: {finished in
  self.animalLabel.transform = CGAffineTransform.identity
  self.changeLabel() }
)
// ※UIView にはtransformというCGAffineTransform型のプロパティがあり、簡単にを拡大・縮小・回転させることができる
// ※CGAffineTransform.identityは元の状態

様々なアニメーション

  • 透明度を変化させる
    animationsにself.インスタンス.alpha = 0.0、completionにself.インスタンス.alpha = 1.0を追加する。
  • 移動
    self.インスタンス.transform = CGAffineTransform(translationX: 100, y: 200)
  • 移動、拡大縮小、回転を同時に行う場合はtransformのメソッドをチェーンにする
    self.インスタンス.transform = self.インスタンス.transform.translatedBy(x: 100, y: 200).scaledBy(x: 0.2, y: 0.2).rotated(by: 90)
    ※translatedBy, scaledBy, rotatedはCGAffineTransformインスタンスを返す

商用利用可能な音声素材

効果音ラボ
https://soundeffect-lab.info/

効果音を鳴らす

音声ファイルをプロジェクトにドロップする。(表示されるダイアログでCreate Groupsを選択)

以下をViewController.swiftに記述。

// importを追加
import AVFoundation
// インスタンス変数を追加
var player: AVAudioPlayer?
// 以下の処理で再生
let soundUrl = Bundle.main.bundleURL.appendingPathComponent("dog.mp3")
do {
  player = try AVAudioPlayer(contentsOf: soundUrl)
  player?.volume = 0.5
  player?.play()
} catch {
  print("sound error")
}

※AVAudioPlayerの変数はインスタンス変数でなければならない。viewDidLoad()の中に書いてしまうと解放されてしまうので、音が鳴らない
※Bundle.main.bundleURL.appendingPathComponentはプロジェクトにインポートしたファイルのURLを取得するもの。決まり文句のようなもの。

スワイプを受け取る

手順

  1. Swipe Gesture REcognizerをViewに追加する
  2. Swipe属性で方向を指定する
  3. アシスタントエディタでメソッドに紐づける

senderによって分岐させる

if sender is UISwipeGestureRecognizer {
    print("swipe")
}

スワイプの方向によって分岐させる

if let swipeGestureRecognizer = sender as? UISwipeGestureRecognizer {
    switch swipeGestureRecognizer.direction {
        case .left:
            print("left")
        default:
            break
    }
}
// 分けて書くと以下のようになる。
let swipeGestureRecognizer = sender as? UISwipeGestureRecognizer
if (swipeGestureRecognizer!.direction == .right) {
    print("right")
}

シェイクを受け取る

motionBeganメソッドをオーバーライドする。

override var canBecomeFirstResponder: Bool {
    return true
}
override func motionBegan(_ motion: UIEvent.EventSubtype, with event: UIEvent?) {
    changeLabel()
    super.canBecomeFirstResponder
}

※canBecomeFirstResponderはなくても動作するが、記述するべき
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11193658636

画面遷移させる

手順

  1. New File⇒CocoaTouch Class⇒Subclass of:でUiViewControllerを選択
  2. オブジェクトライブラリからViewControllerをストーリーボードの空白部分にトロップ
  3. 一番左のアイコンをクリックしアイデンティディインスペクタのCustome Classで作成したクラスを選択
  4. ボタンなど画面遷移のための部品をcontrolを押しながら追加したViewControllerへドロップしshowを選択(Segueの設置)

「戻る」機能の実装

いくつか方法があるが、Navigation Controllerを使うやり方がよく使われる。

  1. ストーリーボードで元のViewControllerを選択⇒Editorメニュー⇒Embed In⇒Navigation Controller
  2. 元のViewControllerの上部にナビゲーションバーが表示されてしまうので、ViewDidLoadに以下を追記し非表示にする
    self.navigationController?.setNavigationBarHidden(true, animated: false)
  3. 遷移先のViewControllerのviewWillAppearメソッドに以下を追加
    self.navigationController?.setNavigationBarHidden(false, animated: false)
  4. 遷移先のViewControllerのviewWillDisappearメソッドに以下を追加
    self.navigationController?.setNavigationBarHidden(true, animated: false)

アプリのライフサイクル

AppDelegate.swiftにメソッドを定義する。

  • application:willFinishLaunchingWithOption:アプリ起動直前
  • application:didFinishLaunchingWithOptions :アプリ起動後
  • applicationWillTerminate:アプリが終了する時
    ※application:didFinishLaunchingWithOptionsだけはデフォルトで定義済み

Xcode11から以下のメソッドはSceneDelegate.swiftに定義するようになった。

  • applicationDidBecomeActive:フォアグラウンド状態に切り替わる直前
  • applicationWillResignActive:フォアグラウンド状態から抜けようとしている時
  • applicationDidEnterBackground:バックグラウンド状態 (いつでも一時停止状態になりうる)
  • applicationWillEnterForeground:バックグラウンド状態から抜けつつあるが、まだアクティブにはなっていない時

【新しい記事】

【古い記事】

コメントを残す

メールアドレスが公開されることはありません。