0

約 10 個のオブジェクトを含むビューがあり、それらに個別のタグをすべて設定しました。for ループを使用して各タグを反復処理し、元の Y 位置から 20 を引いて、すべてを 20 ポイント上に移動したいと思います。私は次のようなことができることを知っています

[self.view viewWithTag:i].frame = CGRectMake(X, Y-20, W, H);;

ただし、X、Y、幅、高さを指定する必要があります。私の質問は、すべてのオブジェクトの元の座標を見つけて、X、W、および H を元の座標に設定し、Y のみを上に移動するにはどうすればよいですか?

どんなヒントでも大歓迎です。

ありがとう

4

3 に答える 3

2

ビューの新しいフレームを現在のフレームに基づいて作成するだけです。

UIView* view = [self.view viewWithTag:i];
CGRect frame = view.frame;
frame.origin.y -= 20;
view.frame = frame;
于 2013-08-23T03:21:33.233 に答える
2

移動したいすべてのビューに同じタグを適用してみませんか。そうすれば、for-in ステートメントを使用して、移動するビューのタグであるかどうかを確認し、条件が true の場合は、アフィン変換をビューに適用できます。フレームを直接変更する代わりに、ビューの変換プロパティを使用すると、元の位置からのビューの正確なオフセットを知ることができます。

NSInteger myTag = 4;

for (UIView *view in self.view.subviews) {
    if (view.tag == myTag) {
        [view setTransform:CGAffineTransformMakeTranslation(0.0f, - 20.0f)];
    }
}
于 2013-08-23T03:21:51.017 に答える
0

試してみることができるアイデアがあるかもしれません。ここでは、UIButton、UILabel、UITextField などの UIView から継承するオブジェクトのみを使用していると想定しています。最初に現在のすべてのフレームを配列に入れ、次にすべての要素を配列に入れることができます。そうすれば、2 番目の配列をループして、要素ごとに Y を array2[i]-20 に設定できます。

NSMutableArray *currentFrames = [[NSMutableArray alloc] init];
for(int i = 0; i<10; i++) //10 being the number of elements, assuming they have tags from 0 to 9
    [currentFrames addObject:[NSValue valueWithCGRect:[self.view viewWithTag:i].frame]];

for(int i = 0; i<currentFrames.count; i++)
{
    UIView *v = [self.view viewWithTag:i];
    [v setFrame:CGRectMake(v.frame.origin.x, v.frame.origin.y-20, v.frame.size.width, v.frame.size.height)];
}
于 2013-08-23T03:21:19.777 に答える