iOS7如何理解UIPushBehaviorModeInstantaneous模式下的UIPushBehavior幅度



我正在查看UIPushBehavior的苹果文档,它在即时模式下让我感到困惑。我知道加速度公式是力=质量*加速度。我假设视图的质量是宽度*高度*密度(1)。文件对推力大小的描述如下:

默认大小为零,相当于没有力。连续大小为1.0的力矢量,应用于100点x 100密度值为1.0的点视图,导致视图加速度为在角度或pushDirection属性。

这在持续推动方面是有意义的,因为它提供了恒定的加速度。它没有说明任何关于非即时推动的内容我如何理解1级的瞬时推力将为100x100视图提供多大的速度

我最初对@HuguesBR的回答投了赞成票,但现在我很后悔,因为他的第一段错了(5分钟后无法取消赞成票)。

根据文件,

可以用大小(幅值)和弧度角度(角度)来表示推送行为的力向量您可以使用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的问题,我用代码测量了移动物体的速度,并用density为1resistance为0瞬间推送100x100视图将使物体的速度达到100点/秒(事实上,我观察到大约99.8)

编辑

Instantaneous模式下进行更多测试后,active属性似乎默认设置为YES,但在帧结束时,在物理模拟结束后返回到NO
事实上,

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

将创建一个运动
要再次推送,只需执行:

self.pushBehavior.active = YES;
编辑:看起来@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];

最新更新