クラスを作成UIView
し、すべてのビューを単一の水平に追加してUIScrollView
、1 つのビューで完了して次のボタンをクリックすると、複数のビューを作成して次のページに移動するのではなく、次のビューにスライドすることを考えていUIViewControllers
ますUINavigationController
。. それは良い考えですか、それともパフォーマンスの問題を引き起こしますか? どちらの方法が良いのか、その理由を教えてください。
2 に答える
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];
}
メモリ管理の観点からは、おそらくナビゲーション コントローラーを使用する方がよいでしょう。少なくともそうすることで、プロセスのその部分が簡単になりますが、スクロール ビューでこれを行うことができない理由はありません。どの要素が画面上にあるか、画面外にあるかを追跡するだけで、異なる要素を割り当て/割り当て解除できます。オブジェクトを適切なタイミングで。
ただし、スクロール ビュー ルートに進むことにした場合は、スクロール ビューの 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)];
}];