だいすきstoryboard - #potatotips (ios/android開発tips共有会) 第7回

18
だいすきStoryboard 【第7回】potatotips (iOS/Android開発Tips共有会) DeNA 松前健太郎 @kenmaz ※背景画像と内容は直接の関係はありません

Upload: kentaro-matsumae

Post on 19-Jun-2015

18.804 views

Category:

Engineering


4 download

DESCRIPTION

#potatotips (iOS/Android開発Tips共有会) 第7回 で発表した資料です。

TRANSCRIPT

Page 1: だいすきStoryboard - #potatotips (iOS/Android開発Tips共有会) 第7回

だいすきStoryboard【第7回】potatotips (iOS/Android開発Tips共有会)

DeNA 松前健太郎 @kenmaz

※背景画像と内容は直接の関係はありません

Page 2: だいすきStoryboard - #potatotips (iOS/Android開発Tips共有会) 第7回

自己紹介

• 松前健太郎 @kenmaz

• 前職 動画にコメント流す会社でiOS/スマホまわり

• 現職 マンガボックスiOS開発 ________________

Page 3: だいすきStoryboard - #potatotips (iOS/Android開発Tips共有会) 第7回

続きはウェb• CodeIQ

• DeNA中の人が解説する「マンガボックス」システム構成とiOSアプリの内部構成

• https://codeiq.jp/magazine/2014/05/9946/

Page 4: だいすきStoryboard - #potatotips (iOS/Android開発Tips共有会) 第7回

StoryboardのTips

Page 5: だいすきStoryboard - #potatotips (iOS/Android開発Tips共有会) 第7回

UIパーツの定義

• なんども繰り返し使うビューはUIパーツとして定義したい

• xibを個別に作ってもいいけど、どうせならstoryboardで完結したい

Page 6: だいすきStoryboard - #potatotips (iOS/Android開発Tips共有会) 第7回

• canvasにViewControllerを追加

• StoryboardIdを設定

• Simulated MetricsのSize = Freeform にして適当にリサイズ

• 必要に応じてUIViewのサブクラスを作ってCustom Classに設定

• viewがとれたらViewControllerは破棄しちゃってOK

UIViewController* vc = [self.storyboard instantiateViewControllerWithIdentifier:@"gridview"]; MJGridView* gridView = (MJGridView*)vc.view; ... //labelの設定、sizeの調整など ... [self.scrollView addSubView:gridView]

Page 7: だいすきStoryboard - #potatotips (iOS/Android開発Tips共有会) 第7回
Page 8: だいすきStoryboard - #potatotips (iOS/Android開発Tips共有会) 第7回

表示要素の切り替え• 条件に応じて表示内容切り替えたい

• 要素の位置は代替おなじ

• 重なっちゃう

Page 9: だいすきStoryboard - #potatotips (iOS/Android開発Tips共有会) 第7回

ContainerView

Page 10: だいすきStoryboard - #potatotips (iOS/Android開発Tips共有会) 第7回

まーちょっと大げさかもしれないけど

Page 11: だいすきStoryboard - #potatotips (iOS/Android開発Tips共有会) 第7回

セグエの有効無効を条件に応じて切り替え

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender { if ([identifier isEqualToString:@"normal_logo"]) { //通常号のロゴ画像 return [self.magazine isNormalVolume]; } if ([identifier isEqualToString:@"digest_logo"]) { //ダイジェスト号のロゴ画像 return [self.magazine isDigestVolume]; } .... }

Page 12: だいすきStoryboard - #potatotips (iOS/Android開発Tips共有会) 第7回

アプリ起動時に 処理待ちしたい

• @sintario さんにおしえてもらった b

• アプリ起動して、メイン画面が表示されるまでに、確実に完了させたい処理がある

• バージョンアップ時のマイグレーションとかとか

• containerViewを使ってフェーズ分けよう

Page 13: だいすきStoryboard - #potatotips (iOS/Android開発Tips共有会) 第7回

initial VC ↓

←main VC

←waiting VC

Page 14: だいすきStoryboard - #potatotips (iOS/Android開発Tips共有会) 第7回

@implementation MJRootViewController !- (void)viewDidLoad { [super viewDidLoad]; ! //必要であればマイグレーション [MJMigration migrateWithCompletion:^{ //マイグレーションが完了したので、メイン画面のロード開始 self.migrationFinished = YES; [self performSegueWithIdentifier:kMainEmbedSegueId sender:self]; }]; } !!- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender { return self.migrationFinished; }

Page 15: だいすきStoryboard - #potatotips (iOS/Android開発Tips共有会) 第7回

Storyboard分割

• デバイスごと、機能毎に分割

• storyboardデカくなりすぎるとxcode重い (SSD必須)

• コンフリクトとか

Page 16: だいすきStoryboard - #potatotips (iOS/Android開発Tips共有会) 第7回
Page 17: だいすきStoryboard - #potatotips (iOS/Android開発Tips共有会) 第7回

その他 (略)• 微妙な操作はカーソルキーで

• ダブルタップすればカーソルキーで微調整できるよ

• プレビュー機能使おう

• iOS6のdeltaの調整のときに使うくらいかな?

• option + preview ってわかりヅラ

• 回転したときのチェック

• Simulated Metrics > Orientation

• Device Family = iPadのときの追加機能

• push,modal,custom 以外にも popover, replace(master-detail)

• popover: 吹き出し方向変えたり, アンカーの位置指定したり

• replace: master/detailのビュー置換の指定

• Auto Layout については聞かないでください(重要)

Page 18: だいすきStoryboard - #potatotips (iOS/Android開発Tips共有会) 第7回

DeNAでは エンジニアを 募集しています

渋谷はよい所です

渋谷タワレコ前にて遭遇(撮影許可済み)