我正在查看UIPushBehavior的Apple文档,它让我在瞬时模式下感到困惑。我知道加速度公式是力=质量*加速度。我假设视图的质量是宽度*高度*密度(1)。该文档描述了推动幅度如下:
默认幅度为零,相当于无力。一个连续的 力矢量的大小为1.0,应用于100点x 100 密度值为1.0的点视图导致视图加速度为 在角度或指示的方向上100点/秒2 pushDirection属性。
这在持续推动方面是有意义的,它提供恒定的加速度。它没有说任何关于皮肤推进的内容。 如何理解1级瞬时推送对100x100视图的速度?
答案 0 :(得分:5)
我最初赞成@HuguesBR回答,但现在我后悔因为他的第一段错误(5分钟后不能取消upvote)。
根据文件,
用力量(幅度)和弧度角(角度)表示推动行为的力矢量。 您可以使用pushDirection属性等效地使用x和y分量来表示方向,而不是使用弧度角。无论使用哪种方法,备用的等效值都会自动更新。
因此,如果您将pushDirection
向量设置为(-1, 0)
,则会在调试magnitude = 1
和angle = PI/2
中看到,反之亦然。
我在一个小型xcode项目中尝试了UIPushBehaviorModeInstantaneous
和UIPushBehaviorModeContinuous
模式,没有
UIDynamicItemBehavior
已定义。我发现了奇怪的行为:
UIPushBehaviorModeInstantaneous
:
默认情况下将将active
属性设置为NO
。active
属性设置为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)
瞬间推送(UIPushBehaviorModeInstantaneous
)没有加速。
然后你不能玩magnitude
(它没有影响)。
相反,您可以使用pushDirection
矢量值。
即:
pushBehavior.pushDirection = CGVectorMake(100, 100);
另外,您可以添加UIDynamicItemBehavior
直接对您移动的对象的行为进行操作,以便添加一些resistance
,friction
,...如果您想减慢速度
UIDynamicItemBehavior *resistanceBehavior = [[UIDynamicItemBehavior alloc] initWithItems:@[view]];
resistanceBehavior.resistance = 1.0;
[self.animator addBehavior:resistanceBehavior];