1

逆放物線があり、放物線のパスを横切るビューが必要です。ビューは、放物線のパスに沿ってわずかに回転および移動する必要があります。

いくつかの調査を行ったところ、放物線のパスをレイアウトするために BezierPath (制御点を含む四分曲線) を使用できることがわかりました。次に、CAKeyFramAnimation を使用してパスに沿ってオブジェクトを移動できます。放物線のパスに沿ってビュー オブジェクトをアニメーション化することは、何が私を混乱させます。放物線内のオブジェクトの始点を変更し続け、ビューの最新の状態を維持するにはどうすればよいですか?

これは、放物線のビューで達成したいことの簡単な説明です

ビューは、放物線の特定の点から始まり、指定された終点まで放物線を横断します。 放物線内の終点を見つけるにはどうすればよいですか? ビューが終点に到達すると、次のトラバーサルでは、その点から開始し、放物線内の他の任意の点に移動できます。これは、次の終点に基づいて継続的に発生します。

これは、パスとビューがどのように見えるかの大まかなスケッチです

ここに画像の説明を入力

また、パスを横断するビューの回転と平行移動の両方が同時に発生するようにしたいと思います

これはどのように行うことができますか?

ありがとうございました!

4

1 に答える 1

0
  • UIBezierPath で放物線を描画し、CGPath に変換するか、CGPath を作成します。
  • CAKeyFrameAnimation を使用して、UIView の位置を移動します。

以下のソースコードを見て、

放物線を描く

CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path,NULL,50.0,120.0);

CGPathAddCurveToPoint(path,NULL,50.0,275.0,
                      150.0,275.0,
                      150.0,120.0);
CGPathAddCurveToPoint(path,NULL,150.0,275.0,
                      250.0,275.0,
                      250.0,120.0);    
CGPathAddCurveToPoint(path,NULL,250.0,275.0,
                      350.0,275.0,
                      350.0,120.0);    
CGPathAddCurveToPoint(path,NULL,350.0,275.0,
                      450.0,275.0,
                      450.0,120.0);

パスに沿った CAKeyFrameAnimation。

CAKeyframeAnimation* AniLoc = [CAKeyframeAnimation animationWithKeyPath:@"position"]; // notice key change

// rest is the same
AniLoc.path = thePath;
AniLoc.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
AniLoc.keyTimes= [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0f],
                  [NSNumber numberWithFloat:0.3f],
                  [NSNumber numberWithFloat:1.0f],nil];
AniLoc.duration = 2.0;

CFRelease(thePath);

[self.logo.layer addAnimation:AniLoc forKey:nil];
于 2013-08-18T17:53:16.063 に答える