我正在考虑创建UIView
类并将所有视图添加到单个水平UIScrollView
,这样当我们完成一个视图并单击下一个按钮时,它会滑动到下一个视图而不是创建多个{ {1}}并使用UIViewControllers
导航到下一页。 。
这是一个好主意还是导致性能问题?你能告诉我哪种方式更好,为什么?
答案 0 :(得分:1)
将所有UIView
添加到UIScrollView
确实会将所有内容加载到内存中(不会自动释放不必要的内容),因此您需要自己发布这些视图。希望这会给你一个想法;
在scrollView上加载你的第一个视图,1)创建(并添加)下一个视图并滚动到它的按钮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];
}
答案 1 :(得分:1)
在内存管理方面,你最好使用导航控制器。至少这样做会使这个过程的一部分更容易,但没有理由你不能用滚动视图做到这一点,你只需要跟踪屏幕上和屏幕外的元素,这样你就可以分配/解除不同的在适当的时间对象。
但是,如果您决定转到滚动视图路径,您可以在滚动视图上简单地设置按钮,调整滚动视图的内容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)];
}];