2

開いた UIBezierPath を定義し、それを衝突境界として設定した場合:

_containerPath = [UIBezierPath bezierPathWithArcCenter:center
                                                radius:radius
                                            startAngle:M_PI
                                              endAngle:0
                                             clockwise:NO];

[_collisionBehavior addBoundaryWithIdentifier:@"containerBoundary" forPath:_containerPath];                                                     

次に重力をオンにすると、「ボウル」の内側に解放されたオブジェクトは下限を尊重しますが、ボウルの上から解放されたオブジェクトは存在しないと思われる側に静止します。これは予想される動作ですか?

落下直角

写真では、赤い四角形が上からドロップされています。ダイナミック アニメーターの参照ビューは、ライト グレーの四角形です。上から落ちてきて見えないラインで止まった。

ベジェ パスをひっくり返すと、実際には赤い四角形が曲線の境界を尊重することを確認しました。また、曲線パスの代わりに開いた(両面)三角形を使用してこれを試しました-同じ結果です。

4

1 に答える 1

1

表示されている動作は、ベジエ パスで塗りつぶした場合と同じようです。「V」を描いて塗りつぶすと、閉じたパスのように動作します。衝突境界では、addBoundaryWithIdentifier:fromPoint:toPoint: を使用して 2 つの行を追加することで、開いた「V」を作成できます。問題を回避する他の方法があるかどうかはわかりません。半円については、上記の方法で追加された一連の直線で近似できると思います。BezierPathWithOvalInRect で得られるものに非常に近い 50 ~ 100 の線を使用する前に、円を概算しました。これが衝突境界として使用された場合、システムに深刻な負担がかかるかどうかはわかりません。

于 2015-03-14T00:20:59.413 に答える