Come si può fare in modo che un cerchio animi il ridimensionamento mantenendo la posizione centrale del cerchio nello stesso punto. Questo codice fa muovere il centro del cerchio verso il basso e verso destra, sembra come il suo limite nell'angolo superiore e sinistro del fotogramma.Animare una scala su un cerchio per mantenere il centro Posizione
Questo livello è come si può vedere una maschera su un altro livello.
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddEllipseInRect(path, nil, CGRectMake(400, 400, 1000, 1000));
CAShapeLayer *shapeLayer = [[CAShapeLayer alloc] init];
[shapeLayer setPath:path];
[shapeLayer setFrame:[glView frame]];
[shapeLayer setFillColor:[[UIColor blackColor] CGColor]];
[[glView layer] setMask:shapeLayer];
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
animation.fromValue = [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.0, 0.0, 0)];
animation.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeScale(1.0, 1.0, 1.0)];
animation.repeatCount = 1;
animation.removedOnCompletion = NO;
animation.fillMode = kCAFillModeForwards;
animation.duration = 3;
[shapeLayer addAnimation:animation forKey:@"transform.scale"];
Ho provato con diversi punti di ancoraggio, ma ancora non ci sono cambiamenti. Si anima sempre nell'angolo sinistro. – Tariq
Rob Mayoff è corretto. Nota come calcola il punto di ancoraggio nello spazio di coordinate unitario, dividendo il centro del fotogramma per il suo massimo in ogni dimensione. Quindi il punto di ancoraggio deve essere un valore compreso tra 0,0 e 1,0. – erikprice
Voglio aggiungere, che nella maggior parte dei casi non si desidera modificare 'anchorPoint' come qui. Hai solo bisogno di impostare la cornice corretta. Ad esempio: vuoi creare una forma con il percorso e ridimensionarla. Prima crea una forma in rect che abbia origine 'x: 0, y: 0'. Quindi, dopo aver impostato questo percorso sul tuo 'CAShapeLayer', devi impaginare il tuo layer impostando il frame. Ad esempio, imposta il fotogramma come necessario, come in questa domanda 'CGRectMake (400, 400, 1000, 1000)'. Ora il tuo ridimensionamento sarà dal punto x, y = 400 + 1000/2 = 900 –