1

我有一个UIVIew(容器)和另一个UIView(盒子),盒子视图位于ContainerView. 当UIButton按下 a 时,我希望框视图从屏幕底部下降,并在左侧 10px 处反弹;然后一旦弹跳停止,我仍然希望该框显示 10px。这是另一个问题的一些示例代码:

UIDynamicAnimator *animator = [[UIDynamicAnimator alloc] initWithReferenceView:self]; //self is the container

UIGravityBehavior* gravityBehavior = [[UIGravityBehavior alloc] initWithItems:@[box]];
[animator addBehavior:gravityBehavior];

UICollisionBehavior* collisionBehavior = [[UICollisionBehavior alloc] initWithItems:@[reportBar.bar]];
collisionBehavior.translatesReferenceBoundsIntoBoundary = YES;
[animator addBehavior:collisionBehavior];

UIDynamicItemBehavior *elasticityBehavior =
[[UIDynamicItemBehavior alloc] initWithItems:@[box]];
elasticityBehavior.elasticity = 0.7f;
[animator addBehavior:elasticityBehavior];

代码在应该运行的时候运行,但盒子没有掉下来。

布局示例

编辑1:

  • self 指的是容器 UIView
  • 我也尝试为 currentViewController.view 更改 self ,没有变化。

编辑2:

  • 所有这些代码都在容器视图实现文件中。
4

3 回答 3

3

尝试制作动画师属性,

@property UIDynamicAnimator *animator;

然后是你的代码,

_animator = [[UIDynamicAnimator alloc] initWithReferenceView:self];

 ...
于 2014-05-28T05:41:00.437 回答
1

我认为您没有指定正确的参考视图。它应该是self.view或者self.containerView

UIDynamicAnimator *animator = [[UIDynamicAnimator alloc] initWithReferenceView:self];

更新我认为您应该将代码放在该场景的 ViewController 中,并按照@BaSha 的建议创建一个动画器属性,单击按钮后您将添加行为并引用self.containerView 只需确保 boxView 在 containerView 内

于 2014-05-28T05:26:27.703 回答
1

以下代码片段可以在您的视图上 提供BOUNCE EFFECT 。

CABasicAnimation * animation = [CABasicAnimation animationWithKeyPath:@"position.y"];</br>
[animation setFromValue:[NSNumber numberWithFloat:y-position1]];   
[animation setToValue:[NSNumber numberWithFloat:y-position2]];
[animation setDuration:.7];    //   time gap between the bounces
animation.repeatCount=500;    //    no:of times bounce effect has to be done 
[YOURVIEW.layer addAnimation:animation forKey:@"somekey"];
于 2015-02-27T03:58:04.573 回答