gpt4 book ai didi

ios - UIDynamicAnimator View 从引用边界外进入

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:43:17 27 4
gpt4 key购买 nike

我想使用 UIDynamicAnimator 和重力/碰撞/弹性效果来制作放下物体的动画。我查看了 Apple 的示例应用程序 DynamicsCatalog , 它非常简单,除了当对象从其容器边界外开始时。

例如,这是从示例应用程序的 APLCollisionGravityViewController.m 文件中获取的代码:

UIDynamicAnimator *animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];

UIGravityBehavior *gravityBeahvior = [[UIGravityBehavior alloc] initWithItems:@[self.square]];
[animator addBehavior:gravityBeahvior];

UICollisionBehavior *collisionBehavior = [[UICollisionBehavior alloc] initWithItems:@[self.square]];
collisionBehavior.translatesReferenceBoundsIntoBoundary = YES;
collisionBehavior.collisionDelegate = self;
[animator addBehavior:collisionBehavior];

如果 self.square 的框架最初完全位于 self.view 中,则效果很好。如果我更改它使其具有负 frame.origin.y 值,事情就会变得奇怪。具体来说,如果 frame.origin.y 的绝对值大于 frame.size.height 的一半,则正方形似乎在“引力”向上而不是向下 -它上升而不是下降。

我正在寻找最初完全位于容器边界之外的正方形(即,我设置了 frame.origin.y = -frame.size.height),如何修改动画师/重力/碰撞行为来适应这种情况?

最佳答案

问题是当对象试图进入引用 View 时,您会撞到顶部边界并导致碰撞!对象从外部掉落并从引用 View 的顶部弹回。

因此您对碰撞边界的定义过于简单:

collisionBehavior.translatesReferenceBoundsIntoBoundary = YES;

没有。您必须手动设置碰撞边界。例如,从引用 View 的底部边界开始,这样对象就可以进入场景并从地板上弹开,如下所示:

UICollisionBehavior* coll = [UICollisionBehavior new];
coll.collisionMode = UICollisionBehaviorModeBoundaries;
coll.collisionDelegate = self;
[coll addBoundaryWithIdentifier:@"floor"
fromPoint:CGPointMake(0,self.view.bounds.size.height)
toPoint:CGPointMake(self.view.bounds.size.width,
self.view.bounds.size.height)];

如果您想在第一次碰撞后更改为不同的封闭边界集,那很好,但首先您必须让对象进入引用 View 。现在,您正在使用碰撞边界将其锁定。

关于ios - UIDynamicAnimator View 从引用边界外进入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23252216/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com