Suche senden
Hochladen
Container View Controllerを正しく使おう
•
23 gefällt mir
•
21,370 views
asakahara
Folgen
potatotips (iOS/Android開発Tips共有会) 第14回で使った資料
Weniger lesen
Mehr lesen
Technologie
Melden
Teilen
Melden
Teilen
1 von 17
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
例外設計における大罪
例外設計における大罪
Takuto Wada
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
U-dai Yokoyama
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
FlutterでGraphQLを扱う
FlutterでGraphQLを扱う
IgaHironobu
Laravelでfacadeを使わない開発
Laravelでfacadeを使わない開発
Kenjiro Kubota
Unityネイティブプラグインの勧め 〜UnityでiOS, AndroidのAPIを利用する方法〜
Unityネイティブプラグインの勧め 〜UnityでiOS, AndroidのAPIを利用する方法〜
KLab Inc. / Tech
Riverpodでテストを書こう
Riverpodでテストを書こう
Shinnosuke Tokuda
Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?
Takayuki Shimizukawa
Empfohlen
例外設計における大罪
例外設計における大罪
Takuto Wada
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
U-dai Yokoyama
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
FlutterでGraphQLを扱う
FlutterでGraphQLを扱う
IgaHironobu
Laravelでfacadeを使わない開発
Laravelでfacadeを使わない開発
Kenjiro Kubota
Unityネイティブプラグインの勧め 〜UnityでiOS, AndroidのAPIを利用する方法〜
Unityネイティブプラグインの勧め 〜UnityでiOS, AndroidのAPIを利用する方法〜
KLab Inc. / Tech
Riverpodでテストを書こう
Riverpodでテストを書こう
Shinnosuke Tokuda
Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?
Takayuki Shimizukawa
Keycloak拡張入門
Keycloak拡張入門
Hiroyuki Wada
FIDO2導入してみたを考えてみた
FIDO2導入してみたを考えてみた
FIDO Alliance
動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説
動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説
Fumiya Sakai
エンジニアから飛んでくるマサカリを受け止める心得
エンジニアから飛んでくるマサカリを受け止める心得
Reimi Kuramochi Chiba
毎日が越境だ!
毎日が越境だ!
増田 亨
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
REST API のコツ
REST API のコツ
pospome
iOSでライブラリを提供する際に気をつけたいこと
iOSでライブラリを提供する際に気をつけたいこと
asakahara
【Swift】ローカル通知のバックグラウンド対応
【Swift】ローカル通知のバックグラウンド対応
Nekokichi
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
Masahiro Nishimi
あの日見たMVCを僕たちはまだ知らない for RoR
あの日見たMVCを僕たちはまだ知らない for RoR
shinnosuke kugimiya
UE4のためのより良いゲーム設計を理解しよう!
UE4のためのより良いゲーム設計を理解しよう!
Masahiko Nakamura
HoloLensでONNXを使って推論(Custom Vision - Object Detection編)
HoloLensでONNXを使って推論(Custom Vision - Object Detection編)
Takahiro Miyaura
Jenkins 再入門
Jenkins 再入門
Jumpei Miyata
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPC
disc99_
Goで実装した UPSIDERの決済金額リミット機能
Goで実装した UPSIDERの決済金額リミット機能
Miki Masumoto
階層的決定性ウォレットを理解しよう
階層的決定性ウォレットを理解しよう
bitbank, Inc. Tokyo, Japan
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
Atsushi Nakamura
実装して理解するLINE LoginとOpenID Connect入門
実装して理解するLINE LoginとOpenID Connect入門
Naohiro Fujie
Ojbecitve-C Use ContainerView (Stroyboard)
Ojbecitve-C Use ContainerView (Stroyboard)
Jaeeun Lee
UIViewController のコンテナ機能
UIViewController のコンテナ機能
Yuichi Fujishige
Weitere ähnliche Inhalte
Was ist angesagt?
Keycloak拡張入門
Keycloak拡張入門
Hiroyuki Wada
FIDO2導入してみたを考えてみた
FIDO2導入してみたを考えてみた
FIDO Alliance
動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説
動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説
Fumiya Sakai
エンジニアから飛んでくるマサカリを受け止める心得
エンジニアから飛んでくるマサカリを受け止める心得
Reimi Kuramochi Chiba
毎日が越境だ!
毎日が越境だ!
増田 亨
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
REST API のコツ
REST API のコツ
pospome
iOSでライブラリを提供する際に気をつけたいこと
iOSでライブラリを提供する際に気をつけたいこと
asakahara
【Swift】ローカル通知のバックグラウンド対応
【Swift】ローカル通知のバックグラウンド対応
Nekokichi
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
Masahiro Nishimi
あの日見たMVCを僕たちはまだ知らない for RoR
あの日見たMVCを僕たちはまだ知らない for RoR
shinnosuke kugimiya
UE4のためのより良いゲーム設計を理解しよう!
UE4のためのより良いゲーム設計を理解しよう!
Masahiko Nakamura
HoloLensでONNXを使って推論(Custom Vision - Object Detection編)
HoloLensでONNXを使って推論(Custom Vision - Object Detection編)
Takahiro Miyaura
Jenkins 再入門
Jenkins 再入門
Jumpei Miyata
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPC
disc99_
Goで実装した UPSIDERの決済金額リミット機能
Goで実装した UPSIDERの決済金額リミット機能
Miki Masumoto
階層的決定性ウォレットを理解しよう
階層的決定性ウォレットを理解しよう
bitbank, Inc. Tokyo, Japan
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
Atsushi Nakamura
実装して理解するLINE LoginとOpenID Connect入門
実装して理解するLINE LoginとOpenID Connect入門
Naohiro Fujie
Was ist angesagt?
(20)
Keycloak拡張入門
Keycloak拡張入門
FIDO2導入してみたを考えてみた
FIDO2導入してみたを考えてみた
動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説
動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説
エンジニアから飛んでくるマサカリを受け止める心得
エンジニアから飛んでくるマサカリを受け止める心得
毎日が越境だ!
毎日が越境だ!
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
REST API のコツ
REST API のコツ
iOSでライブラリを提供する際に気をつけたいこと
iOSでライブラリを提供する際に気をつけたいこと
【Swift】ローカル通知のバックグラウンド対応
【Swift】ローカル通知のバックグラウンド対応
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
あの日見たMVCを僕たちはまだ知らない for RoR
あの日見たMVCを僕たちはまだ知らない for RoR
UE4のためのより良いゲーム設計を理解しよう!
UE4のためのより良いゲーム設計を理解しよう!
HoloLensでONNXを使って推論(Custom Vision - Object Detection編)
HoloLensでONNXを使って推論(Custom Vision - Object Detection編)
Jenkins 再入門
Jenkins 再入門
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPC
Goで実装した UPSIDERの決済金額リミット機能
Goで実装した UPSIDERの決済金額リミット機能
階層的決定性ウォレットを理解しよう
階層的決定性ウォレットを理解しよう
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
実装して理解するLINE LoginとOpenID Connect入門
実装して理解するLINE LoginとOpenID Connect入門
Ähnlich wie Container View Controllerを正しく使おう
Ojbecitve-C Use ContainerView (Stroyboard)
Ojbecitve-C Use ContainerView (Stroyboard)
Jaeeun Lee
UIViewController のコンテナ機能
UIViewController のコンテナ機能
Yuichi Fujishige
BaseViewControllerは作りたくない
BaseViewControllerは作りたくない
今城 善矩
RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介
RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介
Fumiya Sakai
サーバーからiOSアプリを変更する
サーバーからiOSアプリを変更する
toyship
UIImagePickerController よもやま話
UIImagePickerController よもやま話
Kei Kusakari
デザイナーとエンジニアが話す、iOSアプリケーション開発
デザイナーとエンジニアが話す、iOSアプリケーション開発
Kenta Ohsugi
Cocoa勉強会#50-ストーリーボードとセグウェイ
Cocoa勉強会#50-ストーリーボードとセグウェイ
Masayuki Nii
Whats new in_a360-19-20_jp
Whats new in_a360-19-20_jp
ssuser033561
もう怖くないモバイルアプリ開発!
もう怖くないモバイルアプリ開発!
Toshiki Iga
Application Insight Introduction
Application Insight Introduction
Kazushi Kamegawa
【Roppongi.aar #1】Activity/FragmentからControllerへ処理を委譲する
【Roppongi.aar #1】Activity/FragmentからControllerへ処理を委譲する
Hiroyuki Kusu
121117 metro styleapp_templateapp
121117 metro styleapp_templateapp
Takayoshi Tanaka
Ähnlich wie Container View Controllerを正しく使おう
(13)
Ojbecitve-C Use ContainerView (Stroyboard)
Ojbecitve-C Use ContainerView (Stroyboard)
UIViewController のコンテナ機能
UIViewController のコンテナ機能
BaseViewControllerは作りたくない
BaseViewControllerは作りたくない
RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介
RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介
サーバーからiOSアプリを変更する
サーバーからiOSアプリを変更する
UIImagePickerController よもやま話
UIImagePickerController よもやま話
デザイナーとエンジニアが話す、iOSアプリケーション開発
デザイナーとエンジニアが話す、iOSアプリケーション開発
Cocoa勉強会#50-ストーリーボードとセグウェイ
Cocoa勉強会#50-ストーリーボードとセグウェイ
Whats new in_a360-19-20_jp
Whats new in_a360-19-20_jp
もう怖くないモバイルアプリ開発!
もう怖くないモバイルアプリ開発!
Application Insight Introduction
Application Insight Introduction
【Roppongi.aar #1】Activity/FragmentからControllerへ処理を委譲する
【Roppongi.aar #1】Activity/FragmentからControllerへ処理を委譲する
121117 metro styleapp_templateapp
121117 metro styleapp_templateapp
Kürzlich hochgeladen
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
CRI Japan, Inc.
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Hiroshi Tomioka
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NTT DATA Technology & Innovation
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
atsushi061452
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
Toru Tamaki
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
Toru Tamaki
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
CRI Japan, Inc.
Kürzlich hochgeladen
(11)
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
Container View Controllerを正しく使おう
1.
Container View Controllerを 正しく使おう potatotips
(iOS/Android開発Tips共有会) 第14回 2015/2/18 @asakahara
2.
自己紹介 id:sakahara Twitter: @asakahara ・http://sakahara.hatenablog.jp/ ・はてなのアプリケーションエンジニア ・はてなブックマークチームに所属 ・iOS/Androidを主に担当
3.
Container View Controllerのメリット 1.
UINavigationController、UITabBarControllerのように独自の transitionを組み込んでView Controllerを管理する仕組みを実装で きる Container View Controllerの初期化時に各View Controllerへ依存性の 注入を行えるメリットも 2. View Controllerから別のView Controllerを表示することが簡単に 実現できる 3. ログイン状態を確認してログイン画面を出すかその他の画面を出 すの切り替えが容易にできる かつてViewDidAppear:などでログインしてなかったらログイン画面の モーダルを出してたようなコードとおさらばできる
4.
今更ではありますが Container View Controller を正しく使えているでしょうか? 実装が間違っていてもちゃんと動くケースが 多いので意外に気づいてない方がいるかも まずは基本からおさらい
5.
コンテナへView Controllerを追加 1. addChildViewController:を呼び出す そのタイミングで自動的に追加した子の willMoveToParentViewController:が呼び出される 2.
子のビューを自身のビュー階層に追加する 3. 子のdidMoveToParentViewController:を明示的に呼び出して、処理 が終了した旨のシグナルを送信する(transitionが無い場合、すぐに 呼び出す) addChildViewController(contentViewController) view.addSubview(contentViewController.view) contentViewController.didMoveToParentViewController(self)
6.
コンテナからView Controllerを削除 1. 子のwillMoveToParentViewController:を引数にnilを渡して 呼び出し、削除されることを通知する 2.
子のビューをビュー階層から削除する 3. 子のremoveFromParentViewControllerを呼び出して、コン テナから削除する そのタイミングで子のdidMoveToParentViewController:が 自動的に呼び出される contentViewController.willMoveToParentViewController(nil) contentViewController.view.removeFromSuperview() contentViewController.removeFromParentViewController()
7.
func transitionFromViewController(fromViewController: UIViewController, toViewController:
UIViewController) { ! fromViewController.willMoveToParentViewController(nil) addChildViewController(toViewController) ! let width = view.bounds.size.width let height = view.bounds.size.height let startFrame = CGRectMake(0, height, width, height) ! toViewController.view.frame = startFrame let endFrame = CGRectMake(0, 100, width, height) ! transitionFromViewController(fromViewController, toViewController: toViewController, duration: 0.25, options: .TransitionNone, animations: { toViewController.view.frame = fromViewController.view.frame fromViewController.view.frame = endFrame }) { _ in fromViewController.removeFromParentViewController() toViewController.didMoveToParentViewController(self) } } Transitionについて
8.
transitionFromViewController: transitionFromViewController:toViewController:duration: options:animations:completion: ! このメソッドは自動的に新しいビューを追加し、アニメーショ ン表示を行ってから古いビューを削除する。 そのためaddSubview:、removeFromSuperviewは不要 !
9.
isMovingFromParentViewController 親から削除中かどうかを判定をする viewWillDisappear:、もしはviewDidDisappear: から呼ばれた場合の みYESを返す ! isMovingToParentViewController 親に追加中かどうかを判定をする viewWillAppear:、もしはviewDidAppear: から呼ばれた場合のみYES を返す !
10.
shouldAutomaticallyForwardAppearanceMethods ドキュメントを見ると「このメソッドをオーバーライドして NOを返すことで外観に関するコールバックの制御権を取得 できる」とか書いてある・・・ 分かりにくい 更にこんな機能もあります
11.
簡単に言い直すと shouldAutomaticallyForwardAppearanceMethodsをオーバーライ ドしてNOを返すことでトランジションが発生した際の通知を子に自 動的に送らないようして、手動で行うようにする(デフォルトはYES) ! 子の下記メソッドを呼ぶタイミングを手動で調整できる • viewWillAppear/ViewDidAppear:animated • viewWillDisappear/ViewDidDisappear:animated •
willRotateToInterfaceOrientation:duration: • willAnimateRotationToInterfaceOrientation:duration: • didRotateFromInterfaceOrientation:
12.
しかし・・・ •viewWillAppear:/DidAppear: •viewWillAppear/DidDisappear: ! を直接呼ぶのはNG ! その代わりに子の ! •beginAppearanceTransition:animated: •endAppearanceTransition ! メソッドを呼び出すようにする
13.
override func shouldAutomaticallyForwardAppearanceMethods()
-> Bool { return false } ! override func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) contentViewController?.beginAppearanceTransition(true, animated: animated) } ! override func viewDidAppear(animated: Bool) { super.viewDidAppear(animated) contentViewController?.endAppearanceTransition() } ! override func viewWillDisappear(animated: Bool) { super.viewWillDisappear(animated) contentViewController?.beginAppearanceTransition(false, animated: animated) } ! override func viewDidDisappear(animated: Bool) { super.viewDidDisappear(animated) contentViewController?.endAppearanceTransition() } 例えばこんな感じで
14.
private func transition(from:
UIViewController, to: UIViewController) { if from == to { return } ! from.beginAppearanceTransition(false, animated: false) to.beginAppearanceTransition(true, animated: false) ! from.view.removeFromSuperview() to.view.frame = view.bounds view.addSubview(to.view) ! from.endAppearanceTransition() to.endAppearanceTransition() } var selectedIndex: Int = 0 { didSet { transition(childViewControllers[oldValue] as UIViewController, to: childViewControllers[selectedIndex] as UIViewController) } } Viewの切り替えを行う例
15.
まとめ • Container View
Controllerへの追加や削除をする 際にいくつかの手続きがあることを知っておく • これらのルールを守っておけば基本的に問題ない • shouldAutomaticallyForwardAppearanceMetho dsでNOを返すことで、コールバックの制御を自 分でコントロールできることも知っておくとよい
16.
もっと詳しく知りたい方は • iOS View
Controllerプログラミングガイド • UIViewController Class Reference ! これらを読んでより理解を深めましょう
17.
ご清聴ありがとうございました
Jetzt herunterladen