Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在UIGravityBehavior将其移出屏幕后,如何删除UIView?_Ios_Objective C_Uiview_Core Animation_Uiviewanimation - Fatal编程技术网

Ios 在UIGravityBehavior将其移出屏幕后,如何删除UIView?

Ios 在UIGravityBehavior将其移出屏幕后,如何删除UIView?,ios,objective-c,uiview,core-animation,uiviewanimation,Ios,Objective C,Uiview,Core Animation,Uiviewanimation,我试图在action属性上设置一个块,但没有成功。。。有什么想法吗?我知道UIView动画。。。方法有一个完成块,但不确定UIDynamics 编辑:添加代码 [self.animator removeAllBehaviors]; UIGravityBehavior *gravityBehaviour = [[UIGravityBehavior alloc] initWithItems:@[self.onscreen]]; gravityBehaviour.gravityDirection =

我试图在action属性上设置一个块,但没有成功。。。有什么想法吗?我知道UIView动画。。。方法有一个完成块,但不确定UIDynamics

编辑:添加代码

[self.animator removeAllBehaviors];
UIGravityBehavior *gravityBehaviour = [[UIGravityBehavior alloc] initWithItems:@[self.onscreen]];
gravityBehaviour.gravityDirection = CGVectorMake(0, 10);
gravityBehaviour.action = ^{
    if(self.onscreen.frame.origin.y > [UIScreen mainScreen].bounds.size.height)
       [self.onscreen removeFromSuperview];
    NSLog(@"locations is %f, height is %f", self.onscreen.frame.origin.y, [UIScreen mainScreen].bounds.size.height);
};
[self.animator addBehavior:gravityBehaviour];

UIDynamicItemBehavior *itemBehaviour = [[UIDynamicItemBehavior alloc] initWithItems:@[self.onscreen]];
[itemBehaviour addAngularVelocity:-M_PI_2 forItem:self.onscreen];

[self.animator addBehavior:itemBehaviour];

输出反映了视图即使在屏幕外也会继续移动。

因此我在if语句中添加了一个内容:[animator removeAllBehaviors];这似乎起到了作用。

在行为的action属性上设置块是正确的方法。请在此处发布您的代码。可能还想看看我在书中是如何做到这一点的:
let dynamicBehaviour = UIDynamicItemBehavior(items: [randomWord])
weak var weakBehaviour = dynamicBehaviour
weak var weakSelf = self


dynamicBehaviour.action = {

  if let currentY = weakBehaviour?.linearVelocityForItem(rndWord).y {

    if currentY > CGRectGetMaxY(self.view.frame) / 2 {
      weakSelf?.animator?.removeAllBehaviors()
      weakSelf?.randomWord?.removeFromSuperview()
    }
  }
}