我使用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'时,它会起作用,但它会落到整个屏幕的底部。
任何想法我做错了什么?我很想知道,谢谢!
答案 0 :(得分:7)
从例外情况看,self.gameOverFalling
不会从视图层次结构中的finalScoreView
下降。请参阅UIDynamicAnimator class reference的引用:
要为视图设置动画,请使用initWithReferenceView创建动画师: 方法。参考视图的坐标系用作 动画师行为和项目的坐标系。每个动态 与此类动画师关联的项目必须是UIView对象 并且必须从参考视图下降。
答案 1 :(得分:1)
您可能忘记使用以下方法将项目添加到参考视图中:
finalScoreView.addSubview(@[self.gameOverFalling])