Cerco di cambiare un cerchio in un quadrato e viceversa e ci sono quasi. Tuttavia non si anima come previsto. Vorrei tutti gli angoli di un quadrato per essere animati/è mutato, allo stesso tempo, ma ciò che ottengo è il seguente:iOS animano/forma forma da cerchio a quadrato
utilizzare CAShapeLayer
e CABasicAnimation
per animare proprietà forma.
Ecco come ho creato il percorso cerchio:
- (UIBezierPath *)circlePathWithCenter:(CGPoint)center radius:(CGFloat)radius
{
UIBezierPath *circlePath = [UIBezierPath bezierPath];
[circlePath addArcWithCenter:center radius:radius startAngle:0 endAngle:M_PI/2 clockwise:YES];
[circlePath addArcWithCenter:center radius:radius startAngle:M_PI/2 endAngle:M_PI clockwise:YES];
[circlePath addArcWithCenter:center radius:radius startAngle:M_PI endAngle:3*M_PI/2 clockwise:YES];
[circlePath addArcWithCenter:center radius:radius startAngle:3*M_PI/2 endAngle:M_PI clockwise:YES];
[circlePath closePath];
return circlePath;
}
Ecco il percorso piazza:
- (UIBezierPath *)squarePathWithCenter:(CGPoint)center size:(CGFloat)size
{
CGFloat startX = center.x-size/2;
CGFloat startY = center.y-size/2;
UIBezierPath *squarePath = [UIBezierPath bezierPath];
[squarePath moveToPoint:CGPointMake(startX, startY)];
[squarePath addLineToPoint:CGPointMake(startX+size, startY)];
[squarePath addLineToPoint:CGPointMake(startX+size, startY+size)];
[squarePath addLineToPoint:CGPointMake(startX, startY+size)];
[squarePath closePath];
return squarePath;
}
applico il percorso cerchio ad uno degli strati di mio avviso, impostare il riempimento etc. Disegna perfettamente. Poi nel mio selettore gestureRecognizer ho creare ed eseguire la seguente animazione:
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"path"];
animation.duration = 1;
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
animation.fromValue = (__bridge id)(self.stateLayer.path);
animation.toValue = (__bridge id)(self.stopPath.CGPath);
self.stateLayer.path = self.stopPath.CGPath;
[self.stateLayer addAnimation:animation forKey:@"animatePath"];
Come si può notare nella circlePathWithCenter:radius:
e squarePathWithCenter:size:
seguo il suggerimento da qui (per avere lo stesso numero di segmenti e punti di controllo): Smooth shape shift animation
l'animazione sembra meglio poi nel post dall'alto, ma non è ancora quello che voglio raggiungere :(
so che posso farlo con semplice CALayer
e quindi impostare un Il livello appropriato di cornerRadius
per creare un cerchio fuori dal quadrato/rettangolo e dopo quello di animare la proprietà cornerRadius
per spostarlo da un cerchio all'altro, ma sono comunque estremamente curioso se è addirittura possibile farlo con l'animazione CAShapeLayer
e path
.
Grazie in anticipo per l'aiuto!
Sembra che stai avendo lo stesso problema di questa domanda [http://stackoverflow.com/questions/17429797/smooth-shape-shift-animation], basato sulle animazioni - potrebbe valere un'occhiata –
hmm .. Potrebbe essere - conosco la domanda e ho seguito il suggerimento dalla risposta accettata, ma sono comunque un morto fine per me. Ho lo stesso numero di segmenti/punti di controllo che credo serva dato che la mia animazione è in una forma un po 'migliore di quella da lì ma il davanzale non ha idea di come migliorarlo. – fgeorgiew