1

タイル ゲームの iPhone スプリングボードのドラッグ アンド ドロップ機能を模倣しようとしています。現在、MatrixCells を使用してビューの初期化で UIButtons を生成し、それらをビューに追加しています。MatrixCells にはorder、独自のボタンにも使用されるタグがあります ( [button setTag:[cell order]];)。

「layoutSubviews」を使用してビュー内の UIButtons を循環させ、それらをグリッドに配置すると、正常に動作します。グリッドがポップアップ表示され、ドラッグ機能を使用して、必要な場所にボタンを自由にドラッグできます。

- (void)layoutSubviews {

int row = 0;
int col = 0;
for ( UIButton *button in [self subviews] ) {
    [button setFrame:CGRectMake( col * 80 + 5, row * 80 + 25, 70, 70)];

    if (col < 3) {
        col++;
    }
    else {
        row++;
        col = 0;
    }
}

}

ただし、セルの順序を変更するときは、循環はsubviews機能しません。だから、私は自分を循環させ、MatrixCellsそれらを使用しorderて適切なビューを取得し、次にframe. しかし、ボタン0でレイアウトがおかしくなり、ボタンとして使用できなくなりました。

- (void)layoutSubviews {

int row = 0;
int col = 0;
for (MatrixCell *cell in currentOrder) {
    UIView *view = [self viewWithTag:[cell order]];
    [view setFrame:CGRectMake( col * 80 + 5, row * 80 + 25, 70, 70 )];
    if (col < 3) {
        col++;
    }
    else {
        row++;
        col = 0;
    }
}

}

結果の写真は次のとおりです。http://i52.tinypic.com/2q903lk.png

viewWithTagこれに対する最もエレガントなソリューションのようです。だから私は途方に暮れています。これらの実装が同じようにレンダリングされない理由は何ですか?

4

2 に答える 2

2

UIImage灰色のグラデーションの背景を提供する背景があるように見えます。0また、ボタンの が0 になっているようにも見えます[cell order]。background のタグを変更したことがないUIImageため、デフォルトで 0 になります。

[self viewWithTag]最初UIButtonのサブビュー (ラベル 0)を呼び出すと、タグ 0 (UIButton期待したものではなく背景イメージ) を持つ最初のサブビューが検索され、それが移動されます。これ、私は疑う。他のすべてのボタンがうまく並んでいる理由、背景が奇妙に動く理由、および 0 ボタンが表示されない理由です。

于 2011-01-11T17:10:39.183 に答える
1

[self viewWithTag:0]初期化時にビューを変更しなかったためself、期待されるのではなく、最初に戻ります。どうやら初期化時のタグのデフォルトは 0 です。次に、の変更に進み、レイアウトと機能を台無しにしました。初期化時にビューのタグを 999 に変更することで、このジレンマを解決しました。(UIButton *)taglayoutsubviewsframeself

于 2011-01-11T22:18:40.213 に答える