0

漫长的一天,我的大脑似乎不想再与我合作了……

我为子视图数组中的每个视图迭代了一个 for 循环。每个子视图高度为 100 像素。当数组中有 1 项时,视图的 y 值需要设置为 0。当数组中有 2 项时,索引 0 处的视图需要 y 值为 100,索引处的项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...
}

谢谢!

4

3 回答 3

1

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

[subViews objectAtIndex: (subviewCount - i - 1)]不是[subViews objectAtIndex: i]

于 2012-05-22T00:00:09.137 回答
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)则不会执行。

于 2012-05-22T00:18:37.640 回答
1
int n = [subViews count];
for (NSView *v in subViews) {
    n--;
    [v setFrameOrigin:NSMakePoint(copy.view.frame.origin.x, n * 100)];
}
于 2012-05-22T00:42:12.730 回答