Sto provando a creare un'animazione nella mia app iOS in cui una nuova vista scorre sullo schermo da sinistra mentre la vista principale scorre a destra per fare spazio. La vista principale è una sottoview della vista superiore del mio controller di visualizzazione e la vista laterale che scorre è caricata da un file xib separato.Cercando di animare due UIViews contemporaneamente, solo una mossa
Nel caso in cui sia rilevante, ecco il mio codice per caricare la vista laterale, chiamato dal metodo viewDidLoad mio principale del controller della vista:
sideViewController = [[SideViewController alloc] init];
[sideViewController loadView];
sideView = sideViewController.topView;
[self.view addSubview:sideView];
sideView.hidden = YES;
sideView.frame = CGRectMake(-200, 0, 200, 460);
Ed ecco il codice che viene chiamato ad animare i due punti di vista:
sideView.hidden = NO;
[UIView animateWithDuration:0.25f
animations:^{
mainView.frame = CGRectMake(200, 0, 320, 460);
sideView.frame = CGRectMake(0, 0, 200, 460);
}];
Questo sembra abbastanza semplice. Ma per qualche ragione, solo sideView animates - mainView non si muove da nessuna parte. E per rendere le cose ancora più confuse, se commento la riga nel blocco di animazione che sposta sideView, l'animazione per mainView inizia a funzionare.
Qualcuno sa cosa c'è che non va? Da tutte le ricerche e i documenti che ho letto, quello che sto facendo dovrebbe funzionare bene. Quello che pensavo sarebbe stata una semplice animazione si è trasformato in ore di frustrazione. Qualsiasi aiuto sarebbe molto apprezzato!
Edit:
Andando fuori del suggerimento di Guo Luchuan ho cercato animare diverse proprietà dei due UIViews. La maggior parte ha ottenuto lo stesso risultato, anche se l'animazione di entrambe le proprietà di trasformazione ha funzionato quasi a. In quel caso sono state animate entrambe le animazioni, ma la schermata principale ha fatto solo la cosa sbagliata: la sua animazione è iniziata con essa in una posizione diversa e si è conclusa nel posto sbagliato. Sembra come se fosse l'esecuzione della traduzione ho dato istruzioni a fare, ma a partire da questa posizione espressa nei calcoli vettoriali:
starting_point - 0.5 * total_translation
che significa che fino alle ore:
starting_point + 0.5 * total_translation
La vista laterale, invece, anima in modo corretto.
Questo è dannatamente fastidioso. Non mi rendevo conto che le animazioni performanti su iOS in questo modo erano così infrante. La prossima cosa che proverò è l'utilizzo di CABasicAnimation, anche se non sono felice di dover ricorrere a un API di livello così basso per qualcosa di così semplice.
Ho avuto lo stesso problema e ho attivato anche AutoLayout. Disattivarlo non mi ha aiutato purtroppo .... anche se forse mi sono perso il luogo in cui lo spegni globalmente (sto costruendo i miei schermi con il codice). Una soluzione che ho trovato è stata incorporare entrambe le viste in una vista contenitore genitore e animare solo quella. – avance