4

UICollisionBehaviorUIKit Dynamics で使用して、画面外にスローしたビュー ( UIAttachmentBehaviorandを使用UIPushBehavior) が実際に完全に画面外になったときを把握しようとしています。

進行中に追跡できないため、複雑だと感じています。スローされたらUICollisionBehavior、最後のエッジがスーパービューと「衝突」したときを検出するために使用して把握しようとしています。これは、NSTimer ソリューションまたは同様のものと比較して、画面外にあるときを把握する最も簡単な方法のようです (ただし、より簡単な方法を思いつくことができれば、私はすべて耳にします!)。

このプロジェクト(具体的にはこちら)で見た解決策は次のとおりです。

CGRect referenceBounds = self.animator.referenceView.bounds;
CGFloat inset = -hypot(CGRectGetWidth(referenceBounds), CGRectGetHeight(referenceBounds));
UIEdgeInsets edgeInsets = UIEdgeInsetsMake(inset, inset, inset, inset);
[self.collisionBehavior setTranslatesReferenceBoundsIntoBoundaryWithInsets:edgeInsets];

これは、衝突の境界がどこにあるかを計算し (正直なところ、完全には理解していません)、衝突が検出されたときにデリゲートが呼び出されたときに を呼び出しますremoveFromSuperview

しかし、何らかの理由で、これは非常に不安定に機能します。時々私はそれを画面の外に投げ出し、実際には衝突が検出されたデリゲートを何らかの形で呼び出すことは決してありません。タイミングも少し遅くなることが多いです。

私のセットアップに関する限り、フレームがスーパービューの境界に設定された UIScrollView を画面外にスローするだけです(self.viewView Controller内)。

ビューを離れるときの衝突検出を設定するより良い方法はありますか?

4

1 に答える 1