円を作成してスケーリングをアニメートすることはできますが、円の中心位置は同じ点にとどめることができます。このコードは、円の中心を下方向と右方向に移動させ、フレームの上端と左端の境界線のように見えます。円の尺度をアニメートして中心位置を維持する
このレイヤーは、別のレイヤー上のマスクを見ることができます。
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"];
私はさまざまなanchorPOintを試しましたが、まだ変更はありません。常に左隅にアニメートされます。 – Tariq
Rob Mayoffは正しいです。フレームの中央を各次元の最大値で割って、単位座標空間でアンカーポイントを計算する方法に注意してください。したがって、アンカーポイントは0.0〜1.0の値でなければなりません。 – erikprice
ほとんどの場合、ここのように 'anchorPoint'を変更したくないということを付け加えたいと思います。あなたはちょうど適切なフレームを設定する必要があります。たとえば、パスを使用して形状を作成し、それを拡大縮小します。まず、原点 'x:0、y:0'を持つrectで形状を作成します。次に、このパスを 'CAShapeLayer'に設定したら、frameを設定してレイヤーをレイアウトする必要があります。 CGRectMake(400,400,1000,1000)のように、必要に応じてフレームを設定します。あなたのスケールはポイントx、y = 400 + 1000/2 = 900からです。 –