这是漫长的一天,我的大脑似乎不再想和我合作......
我为子视图数组中的每个视图迭代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...
}
谢谢!
答案 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)];
}