Utilizzando layoutSubviews () funziona correttamente quando in bicicletta attraverso UIButtons, ma non quando si pedala, mentre loro recupero per tag

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

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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top