1

メイン ビューを作成し、UIView からサブクラス化した 9 つの UIMyView を追加します。NSBundle を使用してその UIMyViews のインスタンスを追加して nib ファイルをロードし、メイン ビュー コントローラーに addSubview を追加します。もちろん、これらのビューはすべてスーパー ビューの左上隅に表示され、一方が他方を非表示にし、最後に表示されるようにします。スーパービューのポイントを使用して何らかの方法でそれらを配置するか、テーブルのようなものを作成してそのセルにUIMyViewsを追加する必要がありますか?!

テーブルがあり、9 枚のデッキ カードを 3 行 3 列 (9 枚のカード) に配置したとします。これは私が達成する必要があるものです。

[編集] この画像を確認してください: http://www.wpclipart.com/recreation/games/card_deck/cards_symbols/playing_card_symbols.png

3 行と 3 列だけが必要です。

この種の操作のベストプラクティスを提案できる人はいますか?

その後、ドラッグ、タッチ、並べ替えなどの際に、これらの UIMyViews にさまざまなアニメーションと効果を実装したいと考えています。

ありがとうございました。

4

2 に答える 2

2

それらをすべて手動で追加する場合は、メイン ビューに追加する前に、各サブビューのフレームを設定するだけです。

CustomView *view = [[CustomView alloc] initWithFrame:CGRectMake(...)];

すべてを手動で設定するよりも、これにアプローチする「よりスマートな」方法があります。iOS6 にはこのための機能がいくつか含まれており、次のようなグリッドビューも作成されています。

于 2012-07-11T16:51:19.900 に答える
2

すべてのビューをループしてグリッドに配置する場合は、次のようにします。

    // Array of 9 views    
NSArray *views = [NSArray arrayWithObjects:[[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)], [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)], [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)], [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)], [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)], [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)], [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)], [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)], [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)], nil];

int count = 0;
int maxPerRow = 3;
int row = 0;
float spacing = 100.0;

for(UIView *view in views)
{
    // Only added to tell the difference between views, make sure to import QuartzCore or remove the next 3 lines
    view.backgroundColor = [UIColor colorWithRed:.5 green:0 blue:0 alpha:1];
    view.layer.borderWidth = 1;
    view.layer.borderColor = [UIColor whiteColor].CGColor;

    // position view
    view.frame = CGRectMake(count*spacing, row * spacing, view.frame.size.width, view.frame.size.height);
    [self.view addSubview:view];

    if(count % maxPerRow == maxPerRow-1)
    {
        count = 0;
        row++;
    }
    else
    {
        count++;
    }
}

それはあなたに次のようなものを与えるでしょう:

ここに画像の説明を入力

于 2012-07-11T17:09:53.023 に答える