2012-07-11 11 views
6

Ho un UIBezierPath (un cerchio), costruito in maniera incrementale con:UIBezierPath - Animazione Fill

[circlePath addArcWithCenter:clockCenter radius:radius startAngle:angleRadians endAngle:1.5*M_PI clockwise:YES]; 
... 
[circlePath closePath]; 
[COLOR_CIRCLE setFill]; 
[circlePath fill]; 

Di tanto in tanto, vorrei animare il riempimento in modo che ci vuole un secondo per riempire completamente e segue il percorso in quanto è stato costruito (in senso orario). Qual è il metodo preferito per realizzare questo? In questo momento sto pensando a Core Animation, ma spero che ci sia un riempimento: withDelay o alcuni di quelli in cui non mi sono imbattuto. TIA.

+1

Ho fatto qualcosa di simile per una presentazione Core Animation qualche tempo fa. Il [codice di esempio] (https://github.com/d-ronnqvist/cocoaheads-coreanimation-samplecode/blob/master/PieChartProgress/PieChartProgress/DRPieChartProgressView.m) è disponibile su GitHub e contiene molti commenti. –

+3

Puoi anche guardare [la mia risposta] (http://stackoverflow.com/a/8021051/608157) per [iPhone Core Animation - Drawing a Circle] (http://stackoverflow.com/q/7991086/608157) –

risposta

2

Si potrebbe provare questo:

Creare un CAShapeLayer cui path è impostato alla vostra figura. Usa questo CAShapeLayer come maschera per un altro livello in cui disegni un arco/cerchio pieno. Quindi animare l'angolo arco arco/cerchio da 0º a 360º. Questo potrebbe approssimare l'effetto che vuoi.

Non riesco a trovare un modo "built-in" per animare il riempimento come si desidera. Esiste un modo incorporato per animare il tratto, tuttavia:

Utilizzare un UIView con un supporto CAShapeLayer. CAShapeLayer ha una proprietà path. È quindi possibile applicare un'animazione alle proprietà strokeStart e/o strokeEnd del livello.

+0

Mi dispiace, ho appena realizzato che il tuo percorso è un cerchio semplice, non una forma arbitraria. Questa risposta è per una forma arbitraria. Dovresti rimuovere il passaggio di mascheramento per un cerchio normale. Vedi la risposta di David – nielsbot