2012-07-27 11 views
11

私は150のUIViewControllerをストーリーボードに持っており、これらのビュー間のスクロールは非常に遅いです。私はズームインしたりズームアウトしたりするのが簡単ではありません。Xcodeのストーリーボードが遅いです

私はMBPR上だと私はスペック

のXcode 4.4

をインストール:2.3GHzの/ 16G/256、私はそれがそのような事を処理するのに十分だと思います。

ストーリーボードで非常に多くのビューを持ち、パフォーマンスを見逃すことのないオプション、設定、ヒント/ヒントはありますか?

注:すべての解決策を実行しました(キャッシュとワークスペースを削除しています)。うまくいきませんでした。それはストーリーボードのUIViewControllerの数と関係がある。

おかげ

アップデート2016:あなたは、複数のストーリーボードにストーリーボードをリファクタリングすることができますXcodeの7の新機能があるので、ちょうどこの質問を更新します。

はリファクタリングストーリーボード https://developer.apple.com/library/ios/recipes/xcode_help-IB_storyboard/Chapters/RefactorStoryboard.html

あなたは用語「リファクタリングストーリーボード」を検索する場合は、良いチュートリアル:) 1ストーリーボードで

+0

あなたはすでにあなたの問題を解決しましたか?たぶん正しい答えを –

+0

と書いてもいいですか?痛みを感じるのは150-VCです。-s –

答えて

6

これには複数のストーリーボードを使用してください。私はストーリーボードを使用する際の制限は認識していませんが、一度にこれらのUIコードをすべてレンダリングしようとするのはあなたのマシンにとって難しく、開発者が理解することも難しいです。ここで "profileSB、feedSB、mapSB、messagesSB、settingsSB"

は、これらの作成に関するいくつかの良いチュートリアルです:
http://spin.atomicobject.com/2014/02/18/ios-storyboards-xcode5/
http://www.skillmasters.net/main/xcode-using-multiple-storyboards/

+0

Xcodeの新しいバージョンでこの回答を完成させるには、ストーリーボードのリファクタリングhttps://developer.apple.com/library/ios/recipes/xcode_help-IB_storyboard/Chapters/RefactorStoryboard.html – Maziyar

3

150 ViewControllersを見つけるには、私には非常に多くの音。 本当にたくさんのストーリーボードが必要な場合は、フローを最小限に抑えるか、複数のストーリーボードに分割してください。

+1

こんにちは、凄いですが、ストーリーボードの使用には限界がありますか?ストーリーボードに表示できるビューの数は何もないということです。私はそれらをすべて読んで、何もなかった。私はそれらを減らしてコンテンツを動的に表示しようとしましたが、クライアントがこれまでにやったことではなく、私はちょっとしたアップグレードをしています。私はちょうど好奇心の周りにヒント/トリックがあるかどうか、または制限があるかどうかを尋ねました。返信ありがとう。そして、2つのストーリーボードへの分割については考えなかった。ありがとう。 – Maziyar

1

は論理的のようなカテゴリにあなたのストーリーボードを占うようにしてください

私は、UIStoryboardが10以上UIViewControllersであり、さらにContainerViewsであった。ビューをレイアウトし、より多くのものをカスタマイズした後、UIStoryboardはますます怠け者になりました。

私のアプローチは、単一の内部でビューをセットアップすることでしたUIStoryboardsenter image description here

はメニューをロードし、IループNSArrayを経て:コントローラをロードすることは、私のメニュー、IセットアップもUIStoryboard内部セットアップする必要がUIViewControllerためのすべての識別子とNSArray内で行われています特定のUIStoryboardの識別子でUIViewControllersをロードします。これは私が異なるUIStoryboardsため、スイッチを実装するために必要な場所である:私の場合は

self.arrayVCAll = [NSMutableArray new]; 
for (NSArray *array in _arrayViewControllerAll){ 

    NSMutableArray *arrayTemp = [NSMutableArray new]; 

    for (UIViewController *vc in array){ 
     NSString *strViewController = [NSString stringWithFormat:@"%@", vc]; 
     UIStoryboard *storyboard; 

     if([strViewController isEqualToString:@"CustomOneStoryboard"]){ 
      storyboard = [UIStoryboard storyboardWithName:@"FirstVC" bundle:nil]; 

     } else if([strViewController isEqualToString:@"CustomTwoStoryboard"]){ 
      storyboard = [UIStoryboard storyboardWithName:@"SecondVC" bundle:nil]; 

     } else { 
      storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
     } 

     UIViewController *controller = [storyboard instantiateViewControllerWithIdentifier:strViewController]; 

     MyNavController *nav = [[MyNavController alloc] initWithRootViewController:controller]; 
     [arrayTemp addObject:nav]; 
    } 

    [self.arrayVCAll addObject:arrayTemp]; 
} 

、私のUIViewControllersから初期UINavigationControllerを分離した後seguesとだけ問題がありました。 UINavigationControllerの初期値がない場合、セグはnavigationControllerにプッシュされません。それでUIStoryboardSegueが正しく行われるように、それぞれUIViewController(私のNSArrayの)にUINavigationControllerを追加しました。 UINavigationControllerもクラスに接続する必要はなく、UIStoryboardの中に含めて、最初のUIViewControllerに接続するだけです。

7

ストーリーボードを多数の異なるモジュール(別々のストーリーボードにそれぞれ1つずつ)に分割することをお勧めします。あなたが持っているこれらのパフォーマンスの問題を取り除き、他の利点もあります(大規模なSVNの競合などはありません)。

しかし、ストーリーボードの遅れを引き起こしていた別の問題がありました。私はおよそ25のビューコントローラを持っていて、遅れていましたが、Xcodeが外部モニタで動いていたときだけです。

私がストーリーボードの「自動レイアウト」を無効にすると、ラグが完全に消えてしまうことに気付きました。私はこの変更を元に戻すし、次のプロセスをたどっ: -DeleteのViewController -testそれはまだ、まだラグ元に戻すには最終的に私が削除した場合、特定のViewControllerは、すべての遅れを停止した

を変更-if に遅れる場合。私はこれを元に戻し、ビューを通ってどのビューがラグを引き起こしたかを調べました。私は最終的にこれを "UIBarButtonItem"内の "UIButton"に絞り込んだ。私は、ボタンの "タイプ"プロパティを変更し、それを元に戻し、遅れを止めたと思います。 SVNからは、.storyboardファイルでフレームが変更されたようです。この時点の後、遅れは決して戻ってこなかった。

TLDR: ストーリーボードにアイテムが多すぎると、ストーリーボードの遅れが必ずしも発生するとは限りません。私は、Xcodeにいくつかのレイアウトを再実行させることによって、遅れの問題を取り除くことができました。

私の経験が、他の誰かが自分の問題を診断/解決するのに役立つことを願っています。ついに私は本当に迷惑になり、問題を解決しようと約0.5年働いていました。

+0

Tnxメイトは、心に留めておくと良いヒントです:) – Maziyar

+0

ビンゴ!私は信じられないほど遅く、私のストーリーボードには7つのビューコントローラしかありません。 2つのVCのBarButtonItemにUIButtonがありました。私はそれらのボタンとインスタントスピードを削除しました。今、私は原因を知り、解決策を見つけることに... – Swany

+0

私は私のポストで私は一種のものを取り除き、それらを再追加し、それは狂った遅れを止めたフレームをリセットすると言ったように、@Swany。それがあなたのために働くかもしれないそれらを再追加してみてください。 –

関連する問題