iOS7如何理解UIPushBehaviorModeInstantaneous模式下的UIPushBehavior量级?

时间:2014-09-09 16:18:43

标签: ios7 physics uidynamicbehavior uidynamicanimator uipushbehavior

我正在查看UIPushBehavior的Apple文档,它让我在瞬时模式下感到困惑。我知道加速度公式是力=质量*加速度。我假设视图的质量是宽度*高度*密度(1)。该文档描述了推动幅度如下:

  

默认幅度为零,相当于无力。一个连续的   力矢量的大小为1.0,应用于100点x 100   密度值为1.0的点视图导致视图加速度为   在角度或指示的方向上100点/秒2   pushDirection属性。

这在持续推动方面是有意义的,它提供恒定的加速度。它没有说任何关于皮肤推进的内容。 如何理解1级瞬时推送对100x100视图的速度?

2 个答案:

答案 0 :(得分:5)

我最初赞成@HuguesBR回答,但现在我后悔因为他的第一段错误(5分钟后不能取消upvote)。

根据文件,

  

用力量(幅度)和弧度角(角度)表示推动行为的力矢量。 您可以使用pushDirection属性等效地使用x和y分量来表示方向,而不是使用弧度角。无论使用哪种方法,备用的等效值都会自动更新。

因此,如果您将pushDirection向量设置为(-1, 0),则会在调试magnitude = 1angle = PI/2中看到,反之亦然。

我在一个小型xcode项目中尝试了UIPushBehaviorModeInstantaneousUIPushBehaviorModeContinuous模式,没有    UIDynamicItemBehavior已定义。我发现了奇怪的行为:

UIPushBehaviorModeInstantaneous

  • 仅对物体施加一次力,力就会永远存在。
  • 默认情况下将active属性设置为NOactive属性设置为YES适用力量!

    self.pushBehavior1.active = YES;
    self.pushBehavior1.active = YES;
    

    两次施加力量(见编辑)

  • 激活推送行为后,调用self.pushBehavior1.active = NO;不执行任何操作。

UIPushBehaviorModeContinuous

  • 将每个帧应用于对象上的力。它绝对和加速,但限制速度大于瞬时速度......
  • 默认情况下,
  • active属性设置为YES,更改magnitude(或pushDirection)会启动移动。
  • 视频速度首先比推动速度慢一点,但它很快超过它。

所以,为了回答@AlexStone,我在代码中测量了移动物体的速度,并使用 {给即时推送到 100x100视图 {1}} 1 density 0 将为对象提供 100点/秒的速度(我观察到大约99.8 in事实)

修改

resistance模式下进行更多测试后,默认情况下Instantaneous属性似乎设置为active,但在帧结束时返回YES,在模拟物理学之后 的确,

NO

会创造一个动作 再次推动,只需:

self.pushBehavior.magnitude = 1;
[self.animator addBehavior:self.pushBehavior];

答案 1 :(得分:4)

编辑:似乎@martin有更好的答案。请检查一下。我没有时间检查它。

瞬间推送(UIPushBehaviorModeInstantaneous)没有加速。 然后你不能玩magnitude(它没有影响)。 相反,您可以使用pushDirection矢量值。 即:

pushBehavior.pushDirection = CGVectorMake(100, 100);

另外,您可以添加UIDynamicItemBehavior直接对您移动的对象的行为进行操作,以便添加一些resistancefriction,...如果您想减慢速度

UIDynamicItemBehavior *resistanceBehavior = [[UIDynamicItemBehavior alloc] initWithItems:@[view]];
resistanceBehavior.resistance = 1.0;
[self.animator addBehavior:resistanceBehavior];