有没有办法像在自由空间中用UIKit Dynamics吸引两个质量?
我知道,在默认情况下,重力行为就像重力指向地球一样。但这似乎只对一小类行为有用。我能想到这样做的唯一方法是给这两个项目以巨大的质量,而没有初始重力矢量(但是将UIGravityBehavior应用于它们,将它们添加到UIGravityBehavior中吗?)(哈哈)
self.animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
//first item with heavy mass.
self.dynamic = [[UIDynamicItemBehavior alloc] initWithItems:@[self.heavyCircle]];
self.dynamic.density = 1000000000;
self.gravity = [[UIGravityBehavior alloc] initWithItems:@[self.heavyCircle]];
self.gravity.gravityDirection = CGVectorMake(0, 0);
[self.animator addBehavior:self.gravity];
[self.animator addBehavior:self.dynamic];
//second item with less mass
self.dynamic = [[UIDynamicItemBehavior alloc] initWithItems:@[self.smallCircle]];
self.dynamic.density = 10;
//also tried with a huge value here as well.
//HUGE_VALF seems to make the app choke
self.gravity = [[UIGravityBehavior alloc] initWithItems:@[self.smallCircle]];
self.gravity.gravityDirection = CGVectorMake(0, 0);
[self.animator addBehavior:self.gravity];
[self.animator addBehavior:self.dynamic];但这根本没什么用。//我对UIKit动力学中的物理很兴奋,我希望这种行为是可能的。
如果这在UIKit Dynamic中是不可能的,那么还有另外一种同样集成的方法(保持交互性,并充当UIView/Button/Whatever)吗?雪碧包?
谢谢你的帮助!
发布于 2014-05-20 08:05:59
UIDynamicItemBehavior密度不影响UIGravityBehavior。
UIGravityBehavior是一个常量加速向量,应用于它所初始化的所有项目。
为了模拟两个物体之间的重力,你需要一个动态变化的力,这个力取决于两个相互作用的物体的位置。
要使用UIGravityBehavior,您需要在每个动画步骤中动态地更改方向和大小。
幸运的是,UIDynamicBehavior有一个在每个动画步骤上运行的action 区块。
在该动作块中,您可以得到两个项目之间的向量作为方向,并使用项目之间距离的平方来改变力的大小。
模拟一个物体在另一个物体上的力。要使力向另一个方向运动,你需要第二次重力行为。
不幸的是,添加两种重力行为会导致此错误:Multiple gravity behavior per animator is undefined and may assert in the future
不过,你也许可以用其他类型的动态行为来模拟重力。
https://stackoverflow.com/questions/22187179
复制相似问题