Soumettre la recherche
Mettre en ligne
Container View Controllerを正しく使おう
•
23 j'aime
•
21,369 vues
asakahara
Suivre
potatotips (iOS/Android開発Tips共有会) 第14回で使った資料
Lire moins
Lire la suite
Technologie
Signaler
Partager
Signaler
Partager
1 sur 17
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
UnityTechnologiesJapan002
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
Masahiro Nishimi
UXデザインの資格ってどんなの? HCD-Net認定 人間中心設計スペシャリスト・人間中心設計専門家
UXデザインの資格ってどんなの? HCD-Net認定 人間中心設計スペシャリスト・人間中心設計専門家
Yoshiki Hayama
DevOpsにおけるAnsibleの立ち位置と使い所
DevOpsにおけるAnsibleの立ち位置と使い所
Hidetoshi Hirokawa
既存プロジェクトで使っていたDIをお引っ越し&DIYすることになった
既存プロジェクトで使っていたDIをお引っ越し&DIYすることになった
Fumiya Sakai
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
SEGADevTech
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
Kohei Tokunaga
Arxan導入前後で変わったこと
Arxan導入前後で変わったこと
Yusuke Shirakawa
Recommandé
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
UnityTechnologiesJapan002
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
Masahiro Nishimi
UXデザインの資格ってどんなの? HCD-Net認定 人間中心設計スペシャリスト・人間中心設計専門家
UXデザインの資格ってどんなの? HCD-Net認定 人間中心設計スペシャリスト・人間中心設計専門家
Yoshiki Hayama
DevOpsにおけるAnsibleの立ち位置と使い所
DevOpsにおけるAnsibleの立ち位置と使い所
Hidetoshi Hirokawa
既存プロジェクトで使っていたDIをお引っ越し&DIYすることになった
既存プロジェクトで使っていたDIをお引っ越し&DIYすることになった
Fumiya Sakai
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
SEGADevTech
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
Kohei Tokunaga
Arxan導入前後で変わったこと
Arxan導入前後で変わったこと
Yusuke Shirakawa
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
Tokoroten Nakayama
ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】
増田 亨
継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する
TaishiYamada1
「顧客の声を聞かない」とはどういうことか
「顧客の声を聞かない」とはどういうことか
Yoshiki Hayama
5分でわかる Sensor SDK
5分でわかる Sensor SDK
UnityTechnologiesJapan002
Assembly Definition あれやこれ
Assembly Definition あれやこれ
NakanoYosuke1
Docker Tokyo
Docker Tokyo
cyberblack28 Ichikawa
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方
Shohei Koyama
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
UIElements+UI BuilderでEditor拡張を作ろう
UIElements+UI BuilderでEditor拡張を作ろう
Unity Technologies Japan K.K.
インディーゲーム開発の現状と未来 2021
インディーゲーム開発の現状と未来 2021
Unity Technologies Japan K.K.
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
Takaaki Suzuki
ふつうの受託開発チームのつくりかた
ふつうの受託開発チームのつくりかた
Yoshitaka Kawashima
DockerコンテナでGitを使う
DockerコンテナでGitを使う
Kazuhiro Suga
すぐに分かる!プロジェクト計画の作り方
すぐに分かる!プロジェクト計画の作り方
Eisuke Sugitani
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
Webブラウザ上で動作する帳票エンジンを作る話
Webブラウザ上で動作する帳票エンジンを作る話
terurou
動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説
動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説
Fumiya Sakai
【Unity道場】VectorGraphicsで作る エモい表現
【Unity道場】VectorGraphicsで作る エモい表現
Unity Technologies Japan K.K.
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
Shota Shinogi
Ojbecitve-C Use ContainerView (Stroyboard)
Ojbecitve-C Use ContainerView (Stroyboard)
Jaeeun Lee
UIViewController のコンテナ機能
UIViewController のコンテナ機能
Yuichi Fujishige
Contenu connexe
Tendances
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
Tokoroten Nakayama
ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】
増田 亨
継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する
TaishiYamada1
「顧客の声を聞かない」とはどういうことか
「顧客の声を聞かない」とはどういうことか
Yoshiki Hayama
5分でわかる Sensor SDK
5分でわかる Sensor SDK
UnityTechnologiesJapan002
Assembly Definition あれやこれ
Assembly Definition あれやこれ
NakanoYosuke1
Docker Tokyo
Docker Tokyo
cyberblack28 Ichikawa
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方
Shohei Koyama
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
UIElements+UI BuilderでEditor拡張を作ろう
UIElements+UI BuilderでEditor拡張を作ろう
Unity Technologies Japan K.K.
インディーゲーム開発の現状と未来 2021
インディーゲーム開発の現状と未来 2021
Unity Technologies Japan K.K.
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
Takaaki Suzuki
ふつうの受託開発チームのつくりかた
ふつうの受託開発チームのつくりかた
Yoshitaka Kawashima
DockerコンテナでGitを使う
DockerコンテナでGitを使う
Kazuhiro Suga
すぐに分かる!プロジェクト計画の作り方
すぐに分かる!プロジェクト計画の作り方
Eisuke Sugitani
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
Webブラウザ上で動作する帳票エンジンを作る話
Webブラウザ上で動作する帳票エンジンを作る話
terurou
動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説
動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説
Fumiya Sakai
【Unity道場】VectorGraphicsで作る エモい表現
【Unity道場】VectorGraphicsで作る エモい表現
Unity Technologies Japan K.K.
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
Shota Shinogi
Tendances
(20)
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】
継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する
「顧客の声を聞かない」とはどういうことか
「顧客の声を聞かない」とはどういうことか
5分でわかる Sensor SDK
5分でわかる Sensor SDK
Assembly Definition あれやこれ
Assembly Definition あれやこれ
Docker Tokyo
Docker Tokyo
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
UIElements+UI BuilderでEditor拡張を作ろう
UIElements+UI BuilderでEditor拡張を作ろう
インディーゲーム開発の現状と未来 2021
インディーゲーム開発の現状と未来 2021
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
ふつうの受託開発チームのつくりかた
ふつうの受託開発チームのつくりかた
DockerコンテナでGitを使う
DockerコンテナでGitを使う
すぐに分かる!プロジェクト計画の作り方
すぐに分かる!プロジェクト計画の作り方
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Webブラウザ上で動作する帳票エンジンを作る話
Webブラウザ上で動作する帳票エンジンを作る話
動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説
動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説
【Unity道場】VectorGraphicsで作る エモい表現
【Unity道場】VectorGraphicsで作る エモい表現
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
Similaire à 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
Similaire à 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
Dernier
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NTT DATA Technology & Innovation
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
Yuki Kikuchi
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
akihisamiyanaga1
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
Dernier
(8)
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
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.
ご清聴ありがとうございました
Télécharger maintenant