0

我正在考虑创建UIView类并将所有视图添加到单个水平UIScrollView,以便当我们完成一个视图并单击下一步按钮时,它会滑动到下一个视图而不是创建多个视图UIViewControllers并用于UINavigationController导航到下一页。. 这是一个好主意还是会导致性能问题?你能告诉我哪种方式更好,为什么?

4

2 回答 2

1

将所有UIViews 添加到 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 回答