Math需要动态正确定位子视图

时间:2012-05-21 23:56:22

标签: iphone objective-c macos math logic

这是漫长的一天,我的大脑似乎不再想和我合作......

我为子视图数组中的每个视图迭代for循环。每个子视图高度为100像素。当数组中有1个项目时,视图的y值需要设置为0.当数组中有2个项目时,索引0处的视图需要ay值为100,而index处的项目需要1需要的值为0.依此类推:

1 item: 0 = 0
2 items: 0 = 100, 1 = 0
3 items: 0 = 200, 1 = 100, 2 = 0
4 items: 0 = 300, 1 = 200, 2 = 100, 3 = 0

我需要能够仅根据数组中的项目数正确动态处理这个问题。这是我到目前为止的代码:

for (int i = 0; i < [subViews count]; i++) {
    NSView *v = (NSView *)[subViews objectAtIndex:i];
    [v setFrameOrigin:NSMakePoint(copy.view.frame.origin.x, i * 100)];//This gives me the opposite of what I want...
}

谢谢!

3 个答案:

答案 0 :(得分:1)

在循环之前插入:
int subviewCount = [subViews count];

[subViews objectAtIndex: (subviewCount - i - 1)]代替[subViews objectAtIndex: i]

答案 1 :(得分:1)

这将有效:

y = 100 * ([subViews count] - 1 - i)

此外,仅供参考,请尝试使用以下格式的for循环:

for(NSView *thisView in subViews)
{
    int i = [subViews indexOfObject:thisView]; //To get the "i position"
    //The rest of the code can be the same
}

原因是因为如果subViews为空,for(int i = 0; i < [subViews count]; i++)循环将至少运行一次,并在执行NSView *v = (NSView *)[subViews objectAtIndex:i];时崩溃

如果subViews为空,则for(NSView *thisView in subViews)将不会执行。

答案 2 :(得分:1)

int n = [subViews count];
for (NSView *v in subViews) {
    n--;
    [v setFrameOrigin:NSMakePoint(copy.view.frame.origin.x, n * 100)];
}