我正在考虑创建UIView
类并将所有视图添加到单个水平UIScrollView
,以便当我们完成一个视图并单击下一步按钮时,它会滑动到下一个视图而不是创建多个视图UIViewControllers
并用于UINavigationController
导航到下一页。. 这是一个好主意还是会导致性能问题?你能告诉我哪种方式更好,为什么?
问问题
823 次
2 回答
1
将所有UIView
s 添加到 aUIScrollView
确实会将所有内容加载到内存中(不会自动释放不必要的东西),因此您需要自己释放这些视图。希望这能给你一个想法;
在 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];
}
于 2012-09-07T15:45:01.330 回答
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)];
}];
于 2012-09-07T17:21:23.370 回答