Si è verificato un problema durante la creazione di un'animazione esplicita per modificare il valore del percorso di un CAShapeLayer da un'ellisse a un rect.CAShapeLayer Animating Path Glitches/Flicker (da Ellisse a Rect e back)
Nella mia configurazione del controller tela ho un CAShapeLayer base e aggiungerlo al livello della vista root:
CAShapeLayer *aLayer;
aLayer = [CAShapeLayer layer];
aLayer.frame = CGRectMake(100, 100, 100, 100);
aLayer.path = CGPathCreateWithEllipseInRect(aLayer.frame, nil);
aLayer.lineWidth = 10.0f;
aLayer.strokeColor = [UIColor blackColor].CGColor;
aLayer.fillColor = [UIColor clearColor].CGColor;
[self.view.layer addSublayer:aLayer];
Poi, quando ho animare il percorso ho uno strano problema tecnico/sfarfallio negli ultimi fotogrammi del animazione quando la forma diventa retta e nei primi fotogrammi quando si anima lontano dall'essere un rect. L'animazione è configurato come segue:
CGPathRef newPath = CGPathCreateWithRect(aLayer.frame, nil);
[CATransaction lock];
[CATransaction begin];
[CATransaction setAnimationDuration:5.0f];
CABasicAnimation *ba = [CABasicAnimation animationWithKeyPath:@"path"];
ba.autoreverses = YES;
ba.fillMode = kCAFillModeForwards;
ba.repeatCount = HUGE_VALF;
ba.fromValue = (id)aLayer.path;
ba.toValue = (__bridge id)newPath;
[aLayer addAnimation:ba forKey:@"animatePath"];
[CATransaction commit];
[CATransaction unlock];
Ho provato molte cose diverse, come bloccare/sbloccare la CATransaction, giocando con varie modalità di riempimento, ecc ...
Ecco un'immagine del problema tecnico: http://www.postfl.com/outgoing/renderingglitch.png
un video di quello che sto vivendo può essere trovato qui: http://vimeo.com/37720876
Tra la tua risposta e quella che ho postato da David Duncan, ho una buona idea di cosa sta succedendo. Speriamo che la proprietà del percorso animabile migliori nelle prossime versioni. –
Se lo risolvi usando l'approccio ad arco rettangoli, per favore postalo qui! – jrturton
Non so se hai lavorato su questo, o visto qualche buona risposta da quando questo post è stato fatto. Sto iniziando a lavorare su una circonferenza generale sull'animazione del poligono e attualmente lo faccio lavorando per un'animazione da circolare a quadrata. Ho postato questo codice come risposta a questa domanda, http://stackoverflow.com/questions/28437014/animating-between-two-bezier-path-shapes/28448397#28448397 – rdelmar