UIKit&Swiftプログラミング
UIKit&Swiftプログラミング 優れたiPhoneアプリ開発のためのUI実装ガイド
ソフトバンククリエイティブ
著者:斉藤 祐輔 JIBUNSTYLE Inc.
はじめに
Chapter1 本書を読む前に
1-1 はじめに
本書の目的
対象とする読者
特長と効果的な使い方
・iOS開発の専門用語
・オブジェクトの呼称
・プログラミングー般の用語
・サンプルコードのルール
・リファレンスについて
1-2 プログラミング言語Swift
Swift概説
これだけは押さえておきたいSwiftの新要素
・let
・Optional型
1-3 iOSアプリが動く仕組み
アプリってどう動いているの?
アプリの中身
MVCパターン
iOS開発におけるMVCパターン
イベントループ
アプリのライフサイクル
reference UIApplicationクラス
reference UIApplicationDelegateプロトコル
1-4 i0Sアプリの作り方
フレームワーク
階層化されているi0Sアーキテクチャ
・Cocoa Touch層
・Media層
・Core Services層
・Core OS層
UIKitフレームワークとは
UIKitフレームワークでできること
1-5 デザインパターン
Delegateパターン
0bserverパターン
Singletonパターン
Chapter2 StoryboardによるViewデザイン
2-1 Auto Layoutを使ってUl部品を配置する
プレビューの仕方
Alignment Constraintの付加
・Constraintの状態
・Constraint問題の解決
Pin Constraintの付加
Constraintのプロパティ
Resolveアイコンによる問題の解決
LeadingとTrailing
2-2 Size ClassでViewデザインを変更する
Viewの設計
Interface Builder上でSize Classを切り替える
Size Classの導入
・特定のSize ClassのへConstraintの追加
・Size Classの効率的な使い方
2-3 ソースコードでConstraintとSize Classを使う
ソースコードでConstraintを設置する方法
・Visual FormatでUI部品を揃える
・UI部品を親View上で中央寄せする
・Visual Formatを使った中央寄せ
reference NSLayoutConstraintクラス
ソースコードでSize Classを利用する
・UITraitCollectionで各種Traitを利用する
reference UITraitCollectionクラス
reference UITraitEnvironmentプロトコル
Chapter3 ViewControllerと画面遷移
3-1 コンテンツViewControllerによるViewの管理
SceneとInitial ViewControllerの設定
View階層とUlWindow
ルートViewのライフサイクル
reference UIViewControllerクラス
3-2 Segueによる画面遷移とモーダル表示
Segueを使つた画面遷移
・Interface BuilderでSegueを設定する
・ソースコードからSegueを開始する
モーダル表示を利用した画面遷移
・モーダル表示用のViewControllerを追加する
・モーダルビューから元ビューヘ処理を委譲するDelegateプロトコル
・modalTransitionStyleとmodalPresentationStyleプロパティ
Segueでの遷移でも、モーダル表示の様なスタイルを利用する
3-3 コンテナViewControllerによるViewControllerの管理
Master-Detail Applicationでの新規プロジエクト作成
ViewController階層
UISplitViewController
reference UISplitViewControllerDelegateプロトコル
UINavigationController
reference UINavigationControllerDelegateプロトコル
Chapter4 イベント処理
4-1 UIControlEventをハンドルする
UIButtonのアクションメソッドをソースコードで設定する
reference UIControlクラス
4-2 UIGestureRecognizerでジェスチャを検知する
UIKitで用意されているRecognizerと検知対象のジェスチャ
reference UIGestureRecognizerクラス
備え付けのRecognizerを利用する
・lnterface BuilderでRecognizerを設置する
・ソースコード上でRecognizerを設置する
・アクションメッセージを連続で送信するRecognizer
・Recognizerの状態
Recognizer同士の競合(タップとダブルタップ)
・UIGestureRecognizerDelegateを利用する
reference UIGestureRecognizerDelegateプロトコル
・組み込みのイベント処理機構とRecognizerの競合
独自Recognizerの実装
4-3 UIResponderのTouchによるイベント処理
UIResponderを実装してタッチイベントを処理する
reference UIResponderクラス
Responderチェーンの構築
・当たり判定
Responderチェーンを使ってドラツグ可能なImageViewを作る
4-4 UIResponderのMotionによるイベント処理
シェイクモーションとFirst Responder
シェイクモーションをViewControllerハでンドル
Chapter5 ドキュメントの入力・表示・保存
5-1 ユーザの文字入力を取得する
UITextFieldを利用する
reference UITextFieldDelegateプロトコル
・委議のタイミングと通知タイミング
UITextViewを利用する
reference UITextViewDelegateプロトコル
・Notificationの利用
5-2 UITextViewの表示範囲をカスタマイズする
UITextViewの仕組み
他のUI部品を避けて文章を表示する
1つのStorageに複数のLayoutManager・Containerを登録する
5-3 UIDocumentを使ってMVCパターンのモデルを作る
UIDocumentのサブクラスを作るための前提知識
・Uniform type identiffer
・データを保存するストレージ
reference UIDocumentクラス
アプリ内に保存する場合
・Documentのライフサイクルとサンドボックス
・UIDocumentのサブクラスの実装
・Documentの保存と読み出し
・Documentの上書き保存
・Documentの削除
iCloudでドキュメントを他端末と共有する場合
・Documentのライフサイクル(iCloud漣携版)
・iCloud上に保存する方法
・iCloudストレージの検索
。競合が発生した場合
5-4 テキスト入力のカスタマイズ
ペーストボード(クリップボード)を使いこなす
reference UIPasteboardクラス
UIMenuControllerでメニューを制御する
reference UIMenuControllerクラス
Chapter6 独自Viewの実装とアニメーション
6-1 UIKitのグラフィクス機能で独自Viewを実装する
reference UIViewクラス
独自Viewを描画する
reference UIBezierPathクラス
reference UIColorクラス
PDFを作成する
reference PDFに関連するUIKit関数
独自Viewを可変長のUIImageにする
reference Graphicsに関連するUIKit関数
reference UIImageクラス
reference UIImageに関連するUIKit関数
reference UIEdgeInsetsに関連するUIKit関数
6-2 Core Animatton系機能でViewをアニメートする
キーフレームを使わないアニメーション
キーフレームを使ったアニメーション
6-3 UIKitDynamicsで物理法則を使つたアニメートを行う
UIKitDynamicsの使い方
reference UIDynamicAnimatorクラス
reference UIDynamicAnimatorDelegateプロトコル
reference UIDynamicBehaviorクラス
・組み込みで用意されているBehavior
UIGravityBehaviorで重力をエミュレートする
reference UIGravityBehaviorクラス
UICollisionBehaviorで衝突をエミュレートする
reference UICollisionBehaviorクラス
衝突のタイミングで処理を行う
reference UICollisionBehaviorDelegateプロトコル
UIAttachmentBehaviorでアイテムを見えない力で連結する
reference UIAttachmentBehaviorクラス
UISnapBehaviorでアイテムを引き寄せる
reference UISnapBehaviorクラス
UIPushBehaviorで一定方向の力を与える
reference UIPushBehaviorクラス
UIDynamicItemBehaviorでエミュレーションの規定値を変更
reference UIDynamicItemBehaviorクラス
Chapter7 Webブラウザ
7-1 UIWebViewでアプリにWebブラウザを組み込む
UIWebViewでWebページを表示する
reference UIWebViewクラス
reference UIWebViewDelegateプロトコル
7-2 UIWebViewで側アプリを作る
UIWebViewにローカルのHTMLファイルを読み込ませる
SwiftからJavaScriptを実行する
WebページのJavaScriptからSwiftのコードを呼ぶ
キーボード開閉のタイミングを検知する
Chapter8 ユーザ通知
8-1 UIAlertControllerでアプリ内通知を行う
UIAlertControllerでアラートを出す
UIAlertControllerでアクションシートを出す
UIAlertControllerでポップオーバーを出す
reference UIAlertControllerクラス
reference UIAlertActionクラス
アラートにテキストフイールドを載せる
ポップオーバーをiPhoneで使う
reference UIPopoverPresentationControllerクラス
reference UIPopoverPresentationControllerDelegateプロトコル
8-2 UILocaiNotificationでローカル通知を行う
ロ一カル通知の概要
日時を指定してローカル通知を行う
通知からの起動を検知してバッジをクリアする
スケジューリングした通知をキャンセルする
reference UILocalNotificationクラス
位置情報に基づく通知
通知アクション
Chapter9 別アプリとの連携
9-1 URLスキームで別アプリを起動する
ビルトインURLスキームによる連携
独自のURLスキームを実装する
9-2 UIActivity+UIActivityViewControllerを使った連携
ビルトインActivityによる連携
reference UIActivityViewVontrollerクラス
独自Activityの実装
・ViewControllerを使わないActivityの実装
reference UIActivityクラス
・ViewControllerを使ったActivityの実装
9-3 UIDocumentInteractionControllerを使った連携
呼び出し側の実装
呼び出し時にプレビューを表示する
reference UIDocumentInteractionControllerクラス
reference UIDocumentInteractionControllerDelegateプロトコル
受け取り側の実装
Chapter10 バックグラウンド処理と状態管理
10-1 バックグラウンド処理の一時的な延長
タイマーで1秒毎にUIPickerViewを変更する
バツクグラウンドの実行時間を延長する
10-2 NSURLSessionによるバックグラウンド転送
動画をバックグラウンド転送でダウンロードする
NSURLSessionDownloadDelegateプロトコルの継承関係
reference NSURLSessionDelegateプロトコル
reference NSURLSessionTaskDelegateプロトコル
reference NSURLSessionDownloadDelegateプロトコル
10-3 バックグラウンドアプリとしての実装
Background fetchで定期的にデータをダウンロードする
10-4 状態の保存と復元
Viewの状態の保存から復元までの流れ
Storyboardを使つている場合のViewの復元
・UINavigationControllerの設定
・Restoration IDの設定
・AppDelegateでアプリの状態管理を可能に設定
ソースコードから生成したViewControllerの復元
・ViewController自身がrestorationClassとなって自己復元
reference UIViewControllerRestorationプロトコル
・AppDelegateでViewControllerを復元する場合
View以外の状態の保存と復元
Appendix App Extensions
A-1 App Extensions
A-2 Today Extensionでペーストボードの中身を表示する
Extensionのビルドの準備
Extensionのビルドと実行
reference NCWidgetProvidingプロトコル
ペーストボードの中身を表示するウィジェット
A-3 Share ExtensionでURLを共有する
Share Extensionが実行される流れ
reference SLComposeServiceViewControllerクラス
Share Extensionで独自ViewControllerを利用する
・Share Extensionでの独自ViewControllerの実装
reference NSExtensionContextクラス
reference NSExtensionItemクラス
reference NSItemProviderクラス
・Share Extensionが扱えるアイテムを制限する
A-4 Action Extensionで画像を表示する
Action Extensionを実装する
Action Extensionにアイコンを表示する
索引
その他UI部品の使い方