• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - UIDynamicAnimator View 从引用范围之外进入

[复制链接]
菜鸟教程小白 发表于 2022-12-13 07:29:25 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我想使用 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),我该如何修改动画师/gravity/collision 行为来适应这种情况?



Best Answer-推荐答案


问题是当对象试图进入引用 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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap