0

長い一日が過ぎて、私の脳はもう私に協力したくないようです...

サブビューの配列内のビューごとに for ループを繰り返します。各サブビューの高さは 100 ピクセルです。配列に項目が 1 つある場合、ビューの y 値を 0 に設定する必要があります。配列に項目が 2 つある場合、インデックス 0 のビューの y 値は 100 で、インデックスの項目の y 値が必要です。 1 の y 値は 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
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 に答える
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++)ループが少なくとも 1 回実行され、実行時にクラッシュするためです。NSView *v = (NSView *)[subViews objectAtIndex:i];

for(NSView *thisView in subViews)subViews が空の場合は実行されません。

于 2012-05-22T00:18:37.640 に答える