Mit layoutSubviews () funktioniert einwandfrei, wenn sie durch UIButtons Radfahren, aber nicht beim Radfahren, während sie nach Tag Abrufen

StackOverflow https://stackoverflow.com/questions/4659788

Frage

Ich bin zu imitieren versuchen, die iPhone Springboard Drag-and-Drop-Funktionalität für ein Kachel-Spiel und bin derzeit MatrixCells mit UIButtons im View initalisation zu erzeugen und diese in die Ansicht. Die MatrixCells haben einen order Tag, die für ihre eigene Taste als auch ([button setTag:[cell order]];) verwendet wird.

Bei der Verwendung von `layoutSubviews', um durch die UIButtons in der Ansicht, sie in einem Raster anzuordnen, es funktioniert gut. Das Gitter öffnet sich und meine Schleppen-Funktionalität ermöglicht es mir frei Verschieben Sie die Schaltflächen, wo ich will.

- (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;
    }
}

}

Allerdings ist Radfahren durch subviews nicht, wenn die Reihenfolge der Zellen zu ändern, da ich ziemlich sicher bin, bin ich nicht zu verwirren soll um in überhaupt gibt. So wollte ich, um durch meine MatrixCells und nutzen ihre order die entsprechende Ansicht zu erhalten und dann die frame ändern. Allerdings wird das Layout vermasselt auf Taste 0, und ich kann sie nicht als Tasten mehr.

- (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;
    }
}

}

Hier ist ein Bild mit den Ergebnissen: http://i52.tinypic.com/2q903lk.png

viewWithTag schien das die eleganteste Lösung für diese sein. So bin ich ratlos. Jede Idee, warum diese Implementierungen nicht das gleiche machen?

War es hilfreich?

Lösung 2

[self viewWithTag:0] kehrt self ersten, statt der erwarteten (UIButton *), da ich nicht die tag bei der Initialisierung der Ansicht ändern. Apparantly Tags auf 0 bei der Initialisierung Standard. layoutsubviews fährt dann fort, die frame von self zu ändern, das Layout und die Funktionalität vermasselt. Ich löste dieses Dilemma durch die Ansicht des Tag 999 bei der Initialisierung zu ändern.

Andere Tipps

Es scheint mir eher wie Sie einen Hintergrund UIImage haben, dass grauen Farbverlauf Hintergrund zu liefern. Es sieht auch wie Ihre Schaltfläche 0 könnte ein [cell order] von 0. habe ich werde erraten, dass Sie nie den Tag Ihrer Hintergrund UIImage geändert haben, die somit auf 0 nicht erfüllt.

Wenn Sie [self viewWithTag] zum ersten UIButton (mit der Bezeichnung 0) nennen, wird es die erste subview mit einem Tag 0 finden - das Hintergrundbild, nicht die UIButton Sie erwarten - und das bewegen. Diese, wie ich vermute. alle ist, warum die anderen Tasten in einer Reihe aufstellen fein, warum die Hintergrund bewegt sich seltsam, und warum Ihre 0Taste ist nicht sichtbar.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top