【发布时间】:2014-03-25 12:36:54
【问题描述】:
我正在尝试在 UIKit Dynamics 中使用 UICollisionBehavior 来确定我已从屏幕上抛出的视图(使用 UIAttachmentBehavior 和 UIPushBehavior)实际上完全在屏幕外。
我发现它很复杂,因为我无法跟踪它的进展,一旦它被抛出,我试图找出使用UICollisionBehavior 来检测它的最后一条边何时与其超级视图“碰撞”。与 NSTimer 解决方案或类似解决方案相比,这似乎是确定它何时不在屏幕上的最简单方法(但如果您能想到任何更简单的方法,我会全力以赴!)。
我在this project(特别是here)看到的一个解决方案如下:
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)。
有没有更好的方法来为它离开视图时设置碰撞检测?
【问题讨论】:
标签: objective-c cocoa-touch ios7 uikit-dynamics uicollisionbehavior