我试图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
在视图控制器中)。
有没有更好的方法来为它离开视图时设置碰撞检测?