11

ストーリーボードに150のUIViewControllerがあり、これらのビュー間のスクロールが非常に遅いです。ズームインとズームアウトが簡単にできず、ものもらいをするのにかなりの時間がかかります。

MBPRを使用していて、Xcode4.4をインストールしました

スペック:2.3GHz / 16G/256これで十分だと思います。

ストーリーボードに非常に多くのビューを表示し、パフォーマンスを見逃さないためのオプション、設定、またはヒント/コツはありますか。

注:考えられるすべての解決策(キャッシュとワークスペースの削除)を実行しました。動作しませんでした。これは、ストーリーボードのUIViewControllerの数と関係があります。

ありがとう

2016年の更新:ストーリーボードを複数のストーリーボードにリファクタリングできるXcode 7の新機能があるため、この質問を更新するだけです。

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

「ストーリーボードのリファクタリング」という用語を検索すると、優れたチュートリアルが見つかります:)

4

4 に答える 4

7

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

ただし、ストーリーボードの遅延を引き起こす別の問題がありました。私は約25のViewControllerを持っていて、ALOTのラグを受信して​​いましたが、Xcodeが外部モニターで実行されている場合のみでした。

ストーリーボードの「自動レイアウト」を無効にすると、ラグが完全になくなることに気づきました。この変更を元に戻し、次のプロセスに従いました。-ViewControllerを削除します-まだ遅れているかどうかをテストします-まだ遅れている場合は変更を元に戻します

最終的に、削除するとすべてのラグを停止する特定のViewControllerを見つけました。次に、これを元に戻し、ビューを調べて、どのビューがラグの原因であるかを確認しました。最終的に、これを「UIBarButtonItem」内の「UIButton」に絞り込みました。ボタンの「Type」プロパティを変更してから元に戻すと、ラグが止まったと思います。SVNから、.storyboardファイルでフレームが変更されたようです。この時点以降、ラグは二度と戻りませんでした。

TLDR:ストーリーボードにアイテムが多すぎるため、ストーリーボードのラグが常に発生するとは限りません。Xcodeにレイアウトをやり直させることで、ラグの問題をなんとか取り除くことができました。

私の経験が他の誰かが彼らの問題を診断/解決するのに役立つことを願っています。私は約0.5年間働いていましたが、ついに本当にイライラして問題を解決しようとしました。

于 2015-08-17T14:54:18.527 に答える
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 -ストーリーボード/

于 2014-10-30T11:48:40.977 に答える
3

1つのストーリーボードに150個のViewControllerが含まれていると、私にはひどく聞こえます。本当に多くのストーリーボードが必要な場合は、フローを最小限に抑えるか、複数のストーリーボードに分割してください

于 2012-08-13T07:14:11.060 に答える
1

私はUIStoryboard10以上UIViewControllersと追加のを持っていましたContainerViews。ビューをレイアウトし、ますますカスタマイズした後、UIStoryboardますます怠惰になりました。

私のアプローチは、single内にビューを設定することでしたUIStoryboards。コントローラのロードはメニュー内で行われます。ここで、のNSArrayすべての識別子を使用してを設定します。UIViewControllerこれもUIStoryboard:内で設定する必要があります。

ここに画像の説明を入力してください

メニューをロードするとき、私はループして、特定のからのby識別子NSArrayをロードします。これは私が別のスイッチを実装する必要があった場所です:UIViewControllersUIStoryboardUIStoryboards

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];
}

UINavigationController私の場合、イニシャルを私のから分離した後、セグエに問題がありましたUIViewControllers。イニシャルがない場合、セグエはnavigationControllerにプッシュしませんUINavigationController。そのため、(NSArrayの)UINavigationControllerそれぞれにを追加して、正しく実行されるようにしました。また、クラスに接続する必要はありません。クラスに含めて、最初のに接続するだけです。UIViewControllerUIStoryboardSegueUINavigationControllerUIStoryboardUIViewController

于 2015-03-26T12:33:26.760 に答える