¿Cómo puedo hacer una escala animada circular pero mantener la posición central del círculo en el mismo punto. Este código hace que el centro del círculo se mueva hacia abajo y hacia la derecha, parece que está encuadernado en la esquina superior izquierda por el marco.Animar una escala en un círculo para mantener la posición central
Esta capa es como se puede ver una máscara en otra capa.
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"];
He intentado con diferentes puntos de anclaje, pero todavía no hay cambios. Siempre animando a la esquina izquierda. – Tariq
Rob Mayoff es correcto. Observe cómo calcula el punto de anclaje en el espacio de coordenadas de la unidad, dividiendo el centro del cuadro por su máximo en cada dimensión. Entonces el punto de anclaje debe ser un valor de 0.0 a 1.0. – erikprice
Quiero agregar que, en la mayoría de los casos, no desea cambiar 'anchorPoint' como aquí. Solo necesitas establecer el marco adecuado. Por ejemplo: desea crear una forma con una ruta y luego escalarla. Primero crea una forma en rect que tenga origen 'x: 0, y: 0'. Luego, después de establecer esta ruta en su 'CAShapeLayer', necesita diseñar su capa estableciendo frame. Establezca el marco como lo necesita, por ejemplo, como en esta pregunta 'CGRectMake (400, 400, 1000, 1000)'. Ahora su escala será desde el punto x, y = 400 + 1000/2 = 900 –