UICollisionBehavior
UIKit Dynamics で使用して、画面外にスローしたビュー ( UIAttachmentBehavior
andを使用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.view
View Controller内)。
ビューを離れるときの衝突検出を設定するより良い方法はありますか?