iOS7如何理解UIPushBehaviorMode瞬时模式下的UIPushBehavior幅值?

iOS7如何理解UIPushBehaviorMode瞬时模式下的UIPushBehavior幅值?,ios7,physics,uidynamicbehavior,uidynamicanimator,uipushbehavior,Ios7,Physics,Uidynamicbehavior,Uidynamicanimator,Uipushbehavior,我在看苹果的文档,了解它的行为,它让我在即时模式下感到困惑。我知道加速度公式是力=质量*加速度。我假设一个视图的质量是宽度*高度*密度(1)。文件对推力大小的描述如下: 默认幅值为零,相当于没有力。连续的 大小为1.0的力向量,应用于100点x 100 “密度”值为1.0的点视图会产生加速度的视图 100点/秒²,在角度或 pushDirection属性 这对于持续推动来说是有意义的,因为它提供恒定的加速度。它没有说任何关于内在推动的内容我如何理解1级瞬时推力为100x100视图提供的速度?编辑

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

默认幅值为零,相当于没有力。连续的 大小为1.0的力向量,应用于100点x 100 “密度”值为1.0的点视图会产生加速度的视图 100点/秒²,在角度或 pushDirection属性


这对于持续推动来说是有意义的,因为它提供恒定的加速度。它没有说任何关于内在推动的内容我如何理解1级瞬时推力为100x100视图提供的速度?

编辑:似乎@martin有更好的答案。请检查一下。我还没来得及检查

瞬时推压时没有加速度(
uipushbehaviormodetransientative
)。 然后,因为你不能玩
震级
(它没有影响)。 相反,您可以使用
pushDirection
向量值。 即:

此外,您还可以添加一个
uidynamictembehavior
来直接作用于您移动的对象的行为,以便添加一些
阻力
摩擦
。。。如果你想放慢速度

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

起初我对@HuguesBR的答案投了赞成票,但现在我很后悔,因为他的第一段错了(5分钟后不能取消赞成票)

根据文件,

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

因此,如果您将
推送方向
向量设置为
(-1,0)
,您将在调试
中看到幅值=1
角度=PI/2
,反之亦然

我在一个小的xcode项目中试验了
uipushBehaviorModeInstantial
UIPushBehaviorModeContinuous
模式,没有
UIDynamicEmbehavior
已定义
。我发现了奇怪的行为:

uipushBehaviorModeInstance

  • 仅对对象应用一次力,力将永远保持不变
  • 默认情况下,它的
    活动
    属性设置为
    。将
    active
    属性设置为
    YES
    将应用力!及

    用力两次!(见编辑)

  • 一旦推送行为激活,调用self.pushBehavior1.active=NO什么也不做

UIPushBehaviorModeContinuous

  • 在对象上为每个帧应用一个力。它肯定是速度和加速度,但速度上限大于瞬时速度
  • active
    属性默认设置为
    YES
    ,更改
    幅值
    (或
    pushDirection
    )开始移动
  • 查看速度首先比被推的那一刻慢,但很快就超过了它
因此,为了回答@AlexStone,我用代码测量了移动物体的速度,并用密度为1的
和阻力为0的
物体推到100x100视图中(事实上我观察到大约99.8)

编辑

瞬时
模式下进行更多测试后,
活动
属性默认设置为
,但在模拟物理之后,在帧结束时返回到

的确

将创建一个运动。
要再次推动,只需执行以下操作:

self.pushBehavior.active = YES;

你能用
uipushbehaviormodetransient
发布一些代码吗?我在测试前对你的答案投了更高的票,因为它可以解释我的问题,但是
pushDirection
对我不起作用……我无法成功地使
uipushbehaviormodetransient
工作!我也写了一篇关于这方面的文章,基本上它的数量单位是动力
self.pushBehavior1.active = YES;
self.pushBehavior1.active = YES;
self.pushBehavior.magnitude = 1;
[self.animator addBehavior:self.pushBehavior];
self.pushBehavior.active = YES;