Mit layoutSubviews () funktioniert einwandfrei, wenn sie durch UIButtons Radfahren, aber nicht beim Radfahren, während sie nach Tag Abrufen
-
09-10-2019 - |
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?
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.