Domanda

Sto sviluppando la mia prima applicazione per iPhone e ho superato i "macchinari" e ora sto avvolgendo fit & amp; dettagli di finitura.

Ho una vista che scorre dalla parte inferiore dello schermo per il mio riquadro delle impostazioni. La vista stessa ha un'opacità di 0 e ha una vista UIImageView al suo interno con un PNG che crea lo sfondo effettivo per la vista, dietro i controlli. Sto usando le chiamate di animazione integrate per UIView, come in;

[self.view addSubview:settingsViewController.view];

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];

frame.origin.y = 200.0;
settingsViewController.view.frame = frame;

[UIView commitAnimations];

Sfortunatamente, l'animazione sul dispositivo è instabile. Il PNG che sto usando come sfondo è trasparente solo nei 30 pixel più alti della larghezza. Se uso un PNG senza trasparenza, l'animazione è fluida.

L'applicazione stessa è altamente grafica, quindi la vista si sta animando sopra uno schermo pieno di altri PNG.

Sarei estremamente sorpreso se il dispositivo non fosse in grado di gestire senza problemi questo tipo di animazione, il che mi porta a credere di dover affinare il mio approccio. I pensieri che ho avuto finora includono;

Forse dovrei usare direttamente Core Animation? La memorizzazione nella cache della vista dietro il riquadro delle impostazioni prima dell'animazione sarebbe utile in qualche modo?

Questo è un nuovo territorio per me e so che ci devono essere modi per ottimizzare che sono considerati buone pratiche. Grazie per il tuo tempo!

È stato utile?

Soluzione

Non importa se usi l'animazione di base " direttamente " o animare la proprietà center: è instabile perché l'hardware grafico deve comporre l'immagine trasparente con lo sfondo su ogni fotogramma dell'animazione. Hai detto a te stesso che l'uso di un PNG completamente opaco rende l'animazione fluida.

Prova a eseguire l'app in Strumenti, lo strumento Animazione principale ha alcune caselle di controllo che evidenziano le aree composte in tempo reale e che potrebbero darti alcuni suggerimenti su come ripetere il tuo disegno.

Se solo i primi 30 pixel devono essere trasparenti, potrebbe valere la pena dividere lo sfondo in due viste, una striscia di 30 pixel in alto (trasparente) e il resto (opaco). Se sta componendo l'intera vista in ogni fotogramma, tale modifica potrebbe essere sufficiente per fargli sapere che deve solo comporre solo i 30 pixel nella parte superiore.

Altri suggerimenti

Ho avuto qualche problema con l'animazione del frame in passato, prova invece ad animare la proprietà center.

Inoltre, a cosa serve la trasparenza dell'immagine di sfondo? Non sarà possibile usare quell'immagine come sfondo della vista contenitiva ed eliminare la necessità di UIImageView?

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