我可以使用具有不同UIview类的水平ScrollView而不是UINavigationController来导航到不同的viewcontrollers

时间:2012-09-07 13:52:53

标签: ios uiview uiviewcontroller uinavigationcontroller uiscrollview

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

2 个答案:

答案 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)];
}];