Utilizzando layoutSubviews () funziona correttamente quando in bicicletta attraverso UIButtons, ma non quando si pedala, mentre loro recupero per tag
-
09-10-2019 - |
Domanda
Sto cercando di simulare la funzionalità di drag and drop iPhone trampolino per un gioco di piastrelle e sono attualmente in uso per generare MatrixCells UIButtons nella initalisation View e aggiungerli alla vista. I MatrixCells hanno un tag order
, che viene utilizzato per il proprio tasto così ([button setTag:[cell order]];
).
Quando si utilizza `layoutSubviews' per scorrere le UIButtons nella vista di disporli in una griglia, funziona benissimo. La griglia si apre e la mia funzionalità trascinando mi permette di libera e trascinare i pulsanti dove voglio io.
- (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;
}
}
}
Tuttavia, in bicicletta attraverso subviews
non funziona quando si cambia l'ordine delle cellule, dal momento che sono abbastanza sicuro io non ci sono dovuto pasticciare in a tutti. Così, ho voluto passare la mia MatrixCells
e utilizzare le loro order
per ottenere la vista appropriata e quindi modificare la frame
. Tuttavia, la disposizione viene incasinato al tasto 0 e io non li può utilizzare come pulsanti più.
- (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;
}
}
}
Ecco una foto con i risultati: http://i52.tinypic.com/2q903lk.png
viewWithTag
sembrava l'essere la soluzione più elegante per questo. Quindi sono in perdita. Qualsiasi idea del perché queste implementazioni non rendano lo stesso?
Soluzione 2
ritorna [self viewWithTag:0]
self
prima, al posto del (UIButton *)
previsto, dal momento che non ho cambiato tag
della vista al momento dell'inizializzazione. tag apparantly predefinito a 0 in fase di inizializzazione. layoutsubviews
poi proceduto a modificare la frame
di self
, rovinare il layout e le funzionalità. Ho risolto questo dilemma cambiando etichetta della vista a 999 in fase di inizializzazione.
Altri suggerimenti
Mi sembra un po 'come si dispone di un UIImage
sfondo prevedere che gradiente di sfondo grigio. Sembra inoltre che il pulsante 0
potrebbe avere un [cell order]
0. ho intenzione di indovinare che non hai mai cambiato il tag del tuo background UIImage
, che in tal modo default a 0.
Quando si chiama [self viewWithTag]
per la prima UIButton
(etichettato 0), troverà la prima visualizzazione secondaria con un tag 0 - l'immagine di sfondo, non il UIButton
vi aspettavate - e spostare questo. Questo, ho il sospetto. è il motivo per cui tutti gli altri pulsanti si allineano bene, perché lo sfondo si muove in modo strano, e perché il pulsante 0 non è visibile.