4

UIBezierPath ('8' のように湾曲し、4 つのポイントしかない) があり、そこからある種の CGPoint-Array を作成する必要があります。何か案は?ありがとう!

編集:

私はベジエをそのように初期化しました

-(void) initBezier
{
    theBezierPath = [UIBezierPath bezierPath];    
    [theBezierPath moveToPoint:P(211.00, 31.00)];
    [theBezierPath addCurveToPoint:P(870.00, 191.00) controlPoint1:P(432.00, -11.00) controlPoint2:P(593.00, 209.00)];
    [theBezierPath addCurveToPoint:P(731.00, 28.00) controlPoint1:P(1061.95, 178.53) controlPoint2:P(944.69, 5.78)];
    [theBezierPath addCurveToPoint:P(189.00, 190.00) controlPoint1:P(529.00, 49.00) controlPoint2:P(450.00, 189.00)];
    [theBezierPath addCurveToPoint:P(211.00, 31.00) controlPoint1:P(-33.01, 190.85) controlPoint2:P(71.00, 37.00)];
}

そして、その上のオブジェクトをアニメーション化します

anim = [CAKeyframeAnimation animationWithKeyPath:@"emitterPosition"];
anim.path = theBezierPath.CGPath;
anim.calculationMode = kCAAnimationCubicPaced;
anim.repeatCount = HUGE_VALF;
anim.duration = tme;

パス上のオブジェクトをピクセルごとに (タッチ位置を介して) アニメーション化したいと考えています。オブジェクトがパスに沿ってオブジェクトをタッチスライドするように、オブジェクトが曲線上の最も近いポイントにタッチの特定の座標を「スナップ」するようにします。

4

2 に答える 2

7

関数を使用しCGPathApply()て、パス内のすべての要素を反復処理します。引数の 1 つとして、パス要素ごとに呼び出される関数へのポインターを指定する必要があります。パス要素データ構造 (タイプCGPathElement) には、それを記述するポイントが含まれます。

NSValueポイントを に追加するラッパーとして使用しますNSMutableArray

于 2012-06-10T16:45:21.753 に答える
4

任意のベジェ パスに沿ってポイントを評価する方法も、パス上の最も近いポイントを見つける方法UIBezierPathも提供しません。CGPathそのコードは自分で書く必要があります。

幸いなことに、これは非常によく研究されたトピックです。このチュートリアルには、始めるのに役立つ情報がたくさんあります。「3 次」または「3 次」のベジエ曲線に興味がある。

于 2012-06-10T19:38:42.977 に答える