Domanda

Ho un singolo UIView per disegnare uno qualsiasi di un insieme di elementi. Cioè, il mio sottoclasse UIView uno può essere detto per disegnare un quadrato, cerchio, triangolo o per esempio.

Mi piacerebbe avere una transizione di capovolgere questo punto di vista in modo che l'UIView disegna una forma diversa al punto a metà strada, in modo che appaia come se fossi la transizione a una visione diversa, ma in realtà sto solo ridisegnare la un'unica vista al punto a metà della transizione.

C'è un modo per fare questo, senza ricorrere all'utilizzo di due UIViews diversi e sostituendo nel blocco di animazione? Sarebbe un po 'goffo per me di adeguare quello che ho da utilizzare il meccanismo di swap.

Idealmente ho solo bisogno di un po 'di richiamata o notifica che l'animazione è al punto a metà strada, e poi posso ridisegnare la vista con la nuova forma poi.

Grazie per qualsiasi aiuto!

È stato utile?

Soluzione

Anche se si sapeva il punto medio della tua animazione flip, non credo ridisegnare il contenuto della visualizzazione metà animazione avrebbe fatto qualsiasi cosa. Penso che il contenuto del livello della vista vengono memorizzati nella cache all'inizio dell'animazione e non cambiano con il procedere di animazione. Inoltre, la visualizzazione finirebbe invertita, da sinistra a destra, alla fine dell'animazione se non si dispone di un altro vista dietro di esso.

Se si desidera fare questo come un'animazione personalizzata, si potrebbe rompere questo in due metà che utilizzano qualcosa come Mike Lee di Lemur flip implementazione che ho descritto nel questa risposta . Dopo la prima metà dell'animazione, si potrebbe ridisegnare il contenuto della vista e completare l'animazione, finendo di nuovo al punto di partenza.

Tuttavia, a me sembra più goffo di non cambiare le visualizzazioni in risposta alla transizione. Certamente ci vorrà molto più codice da fare.

Altri suggerimenti

si può provare a fare smth come questo. Per esempio, la vostra proprietà animationDuration è impostato su 2.0f. così, il punto a metà strada è di 1 secondo, in modo da poter utilizzare

  

[auto performSelector: @selector (yourCallbackMethod) withObject: nil afterDelay: 1.0f];

L'unico modo che conosco che si potrebbe fare è quello di ricreare l'animazione utilizzando Core Animation e quindi monitorare l'animazione nel presentationLayer utilizzando un timer. Non v'è alcun KVO disponibile in core layer di animazione in modo da avere per monitorare in modo esplicito.

In altre parole, non è probabilmente vale la pena. Vi suggerisco di pensare a un modo diverso per risolvere il problema.

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