UIDynamicAnimator - 不能与UIView一起使用,但会使用Self.View吗?

时间:2014-02-20 00:31:51

标签: iphone animation view uiview

我使用Apple的示例应用程序中的代码并将其调整为我的。我希望UIImageView gameOverFalling能够运行这种方法(跌倒和反弹)。它应该与UIView finalScoreView发生冲突,如第2行所示。

-(void)gameOverFallingMethod{
    UIDynamicAnimator *animator = [[UIDynamicAnimator alloc] initWithReferenceView:finalScoreView];

    UIGravityBehavior *gravityBeahvior = [[UIGravityBehavior alloc] initWithItems:@[self.gameOverFalling]];
    [animator addBehavior:gravityBeahvior];

    UICollisionBehavior *collisionBehavior = [[UICollisionBehavior alloc] initWithItems:@[self.gameOverFalling]];
    // Apple said: "Creates collision boundaries from the bounds of the dynamic animator's
    // reference view (self.view)."
    collisionBehavior.translatesReferenceBoundsIntoBoundary = YES;
    collisionBehavior.collisionDelegate = self;
    [animator addBehavior:collisionBehavior];

    self.animator = animator;
}

然而,当我运行我的应用程序时,它返回一个Thread 1:SIGABRT错误。在控制台中:

View item (<UIImageView: 0x10aaa0c70; frame = (15 175; 288 42);
  autoresize = RM+BM; userInteractionEnabled = NO; layer = <CALayer: 0x10aa7e0a0>>)
should be a descendant of reference view in <UIDynamicAnimator: 0x10ae17610>
Stopped (0.000000s) in <UIView: 0x10aa9e1e0> {{0, 0}, {288, 195}}

当我用'self.view'替换第2行的'finalScoreView'时,它会起作用,但它会落到整个屏幕的底部。

任何想法我做错了什么?我很想知道,谢谢!

2 个答案:

答案 0 :(得分:7)

从例外情况看,self.gameOverFalling不会从视图层次结构中的finalScoreView下降。请参阅UIDynamicAnimator class reference的引用:

  

要为视图设置动画,请使用initWithReferenceView创建动画师:   方法。参考视图的坐标系用作   动画师行为和项目的坐标系。每个动态   与此类动画师关联的项目必须是UIView对象   并且必须从参考视图下降。

答案 1 :(得分:1)

您可能忘记使用以下方法将项目添加到参考视图中:

finalScoreView.addSubview(@[self.gameOverFalling])