0

クラスを作成UIViewし、すべてのビューを単一の水平に追加してUIScrollView、1 つのビューで完了して次のボタンをクリックすると、複数のビューを作成して次のページに移動するのではなく、次のビューにスライドすることを考えていUIViewControllersますUINavigationController。. それは良い考えですか、それともパフォーマンスの問題を引き起こしますか? どちらの方法が良いのか、その理由を教えてください。

4

2 に答える 2

1

UIViewすべての を aに追加すると、UIScrollView実際にすべてがメモリにロードされます (不要なものが自動的に解放されることはありません)。そのため、これらのビューを自分で解放する必要があります。これでアイデアが得られることを願っています。

1) 次のビューを作成 (および追加) してスクロールするボタンを使用して、最初のビューを scrollView にロードします。2) 新しいビューには、スクロールを最初のビューに移動し、2 番目のビューを無効にする戻るボタンが必要です。

1)-(void) moveToSecondView{
   //iVar of your second view
   secondView = [[UIView alloc] initWithFrame:CGRectMake(320,0,320,480)];
   //Previously created button with a returnToFirstView selector
   [secondView addSubview:backButton];
   [scrollView addSubview:secondView];
   [scrollView scrollRectToVisible:secondView.frame animated:YES];
}

2)-(void) returnToFirstView{
    [secondView removeFromSuperview];
    secondView = nil;
    [scrollView scrollRectToVisible:firstView.frame animated:YES];
  }
于 2012-09-07T15:45:01.330 に答える
1

メモリ管理の観点からは、おそらくナビゲーション コントローラーを使用する方がよいでしょう。少なくともそうすることで、プロセスのその部分が簡単になりますが、スクロール ビューでこれを行うことができない理由はありません。どの要素が画面上にあるか、画面外にあるかを追跡するだけで、異なる要素を割り当て/割り当て解除できます。オブジェクトを適切なタイミングで。

ただし、スクロール ビュー ルートに進むことにした場合は、スクロール ビューの content offset.x プロパティを調整してページ間をジャンプするボタンをスクロール ビューに簡単に作成できます。これを使用して、スクロール ビューを設定できます。

下の配列に必要なページ数をエントリとして追加するだけで、スクロール ビューが動的に調整され、すべてのページの新しいビューに対応します。

[myScrollView setPagingEnabled:YES];

NSArray *arrayOfViews = [[NSArray alloc] initWithObjects:@"First View",@"Second  View",@"Third View",@"Fourth View",@"Fifth View", nil];//number of views you want in your scroll view

[arrayOfViews enumerateObjectsUsingBlock:^(id obj, NSUInteger idx,BOOL *stop) {
    UIView *subView = [[UIView alloc] initWithFrame:CGRectMake(320 * idx, 0, 320, 480)];
    float randNum = arc4random() % 255;
    [subView setBackgroundColor:[UIColor colorWithRed:randNum/255 green:randNum/255 blue:randNum/255 alpha:1.0]];
    [myScrollView addSubview:subView];
    [myScrollView setContentSize:CGSizeMake(320 * (idx + 1), 480)];
}];
于 2012-09-07T17:21:23.370 に答える