动态地为Scroll View分配视图

时间:2011-08-03 07:41:36

标签: iphone objective-c ios4 uiviewcontroller uiscrollview

我有一个UIScrollView和五个UIViewController的A,B,C,D,E。 要在滚动视图中显示的UIViewController视图的顺序取决于某些先决条件(例如,有一天它可能是B,A,E,D,C和下一个E,A,D,B, C等等。

如何跟踪要显示的UIViewController(如每个UIViewController的标签,可以存储在数组中并更新)? 是否可以以上面显示的动态方式为滚动视图分配视图?

1 个答案:

答案 0 :(得分:0)

你想找到一种方法来排列5个视图控制器吗? 也许它有助于使用素数的属性。

这取决于你想要的排列数。 但由于只有5个视图控制器,所以不能超过5个! = 120个排列 什么是好的5是它是一个素数

所以如果你计算(n * a)%5,其中a是从0到4的常数,n是从1到5的变量,你得到一个这样的表:

a==0,  0,0,0,0,0
a==1,  1,2,3,4,0
a==2,  2,4,1,3,0
a==3,  3,1,4,2,0
a==4,  4,3,2,1,0

正如您所见,这是完全不同的排列,其中每个数字只出现一次。

所以,如果你想要120个排列

只应用一个常数b(从0到4),并计算(n * a + b)%5

那么你将获得前一个结果的5倍,即125,但是有一些重复,那么最终的结果将是120个排列。

所以,你唯一要做的就是用你的先决条件确定a和b

并应用以下代码:

int result = (n*a + b)%5;
static UIView *addedView = nil;
if(addedView != nil)
    [addedView removeFromSuperview];

switch(result)
{
    case 0:
        [self.scrollView addSubview:VCA.view];
        addedView = VCA.view;
        break;
    case 1:
        [self.scrollView addSubview:VCB.view];
        addedView = VCB.view;
        break;

    //and so on...
 }

hope it helps