首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >相互吸引两个质量的w/ UIKit动力学

相互吸引两个质量的w/ UIKit动力学
EN

Stack Overflow用户
提问于 2014-03-05 02:17:54
回答 1查看 1K关注 0票数 2

有没有办法像在自由空间中用UIKit Dynamics吸引两个质量?

我知道,在默认情况下,重力行为就像重力指向地球一样。但这似乎只对一小类行为有用。我能想到这样做的唯一方法是给这两个项目以巨大的质量,而没有初始重力矢量(但是将UIGravityBehavior应用于它们,将它们添加到UIGravityBehavior中吗?)(哈哈)

代码语言:javascript
复制
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)吗?雪碧包?

谢谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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

不过,你也许可以用其他类型的动态行为来模拟重力。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22187179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档