问题标签 [uidynamicanimator]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
475 浏览

uicollectionview - 从 UICollectionView 中的 UIAttachmentBehavior 中删除振荡

我正在尝试重新创建您在我的UICollectionView. 与消息一样,它将根据文本大小具有各种单元格大小。我创建了一个自定义UICollectionViewFlowLayout,它确实将行为添加到了,UICollectionView但是在用户停止滚动后,消息气泡会继续轻微振荡。我在length,dampingspring值中尝试了任意数量的组合,但振荡永远不会消失。

在阅读了其他堆栈问题之后,我确实找到了这个评论

为了防止振荡,随着附加视图越来越接近它们的附加点,有必要在二次尺度上动态增加阻尼因子。<

但是我不确定从哪里开始在我目前拥有的东西上实施类似的东西。任何帮助或指导将不胜感激。

下面是我UICollectionViewFlowLayout创建当前效果的代码。

0 投票
0 回答
219 浏览

ios - UIDynamicAnimator with layoutSubviews laggy

我尝试实现侧边栏菜单。我已经用标准UIView动画完成了它,但现在我想给它添加一些感觉。我决定使用UIViewDynamics. 我注意到,在主视图框架更改后,有必要重新创建UIViewAnimator和所有行为。

我通常使用layoutSubviews视图的方法。但在那种情况下,我的控制器继承了UINavigationController它,我无法覆盖它的视图,所以我使用了控制器生命周期方法。

为避免意外结果,首先我删除方法中的所有动画师行为viewWillLayoutSubviews。之后,最后viewDidLayoutSubviews我创建了一个动画师和行为(重力、项目、推动、碰撞)。

效果很好,但是当layoutSubviews触发时,它会有些滞后(看起来像低 fps)。

一些代码:

希望您能提供帮助,并随时提出任何相关问题。谢谢。

应用程序在屏幕旋转时消耗 9-12 % cpu。

PS:我已经尝试将动画师和行为创建移动到单独的线程中,但是:

  1. 在后台线程中使用视图 - 坏主意
  2. 它只是没有帮助
0 投票
1 回答
62 浏览

ios - 将 UIDynamics 与 Storyboard 一起使用

我在以编程方式创建的 UIView 上添加了一个 UIDynamicAnimator。现在我想在 Storyboard 中创建 UIView,因为我想使用自动布局。有人知道我必须改变什么才能使用 Storyboard 中的 UIView 吗?

我的代码:

0 投票
1 回答
965 浏览

swift - 使用 Swift 向 UIView 添加碰撞

我正在尝试在不使用 Spritekit 的情况下在 Xcode 中制作乒乓球游戏。我正在为球和桨使用 UIVeiws。为了移动桨,我在情节提要中使用了平移手势识别器并将其连接到 UIView。

我想为桨添加碰撞,但我需要它与桨一起移动。现在,使用 addBoundaryWithIdentifier,它仅在桨位于原点时才有效。

帮助帮助!到目前为止,这是我的代码...

类视图控制器:UIViewController,UICollisionBehaviorDelegate {

}

0 投票
2 回答
483 浏览

ios - IOS UIDynamicAnimator maskToBounds 不会使碰撞作为边界工作

我在 Xcode 7 中工作,适用于 IOS 9。目标是使用 UIDynamicAnimator、UIGravityBehavior 和 UICollisionBehavior 使圆形对象表现得像球一样。一切正常,除了 UIViews(代表球)看起来是圆形的,但在碰撞过程中表现得像矩形。构建和添加“球”的代码是:

需要设置哪些属性才能使这些对象表现得像圆形?

下面是应用程序的屏幕,显示受重力和碰撞影响的形状如何放置在地面/边界上。我在屏幕截图上绘制了矩形边框以显示不可见但防止球表现为圆形物体的真实边框。

应用截图1

0 投票
0 回答
56 浏览

ios - 我在使用 UIDynamicAnimations 以及创建和删除项目时遇到性能问题

我制作了一个基于UIDynamicBehavior. 这是一个游戏,您在屏幕中间有一个圆圈,并且有球从中间发射到外圈(当它们击中时它们消失),“发射”之间的间隔变得越来越短(这确实不会导致问题,稍后您会看到)。好吧,问题是在大约 100 圈之后,一切都变得非常滞后,每次“启动”都会冻结整个游戏一段时间,直到问题变得如此之大,整个事情都冻结了。

问题似乎是我以某种方式没有正确删除球。即使间隔没有改变,同时屏幕上的球数始终相同(3-4),问题仍然存在。

这也不是内存问题,因为内存使用量保持在 20MB 左右,但处理器从一开始的 0% 开始,它只是不断上升,直到达到 100%,整个事情就停止了。

所以当我创建一个球时,这就是那里的所有代码:

这就是我将其添加到行为中的方式:

这就是我删除它的方式:

这是设置为在与另一个圆圈发生碰撞时触发。

对于大量的代码,我很抱歉,但我真的无法找出问题出在哪里,所以我很难指出它。

我已经解决这个问题超过 2 天了,但仍然无法弄清楚。我尝试了一切,重用行为(我没有删除它,而是创建了一个数组,以便下一个球从那里拿走它并设置一个新角度),多线程(我对此并没有真正的经验),我还研究了时间探查器,但因为我是初学者,所以对我来说没有任何意义。我真的很感谢知道自己在做什么的人能够只盯着它检查并发现任何问题,因为我认为对于有经验的程序员来说问题可能非常明显。如果有帮助,这是我的项目的链接。所以你可以看到我有两件我认为很重要的事情。我有一个子类UIDynamicBehavior我设置了所有行为和一个基本的快速类“BallLauncher”,这应该是导致球发射的原因,因此那里也可能存在问题。

0 投票
1 回答
136 浏览

swift - UIGravityBehavior 在移动项目后不起作用

当我启动我的应用程序时,我看到 UILabel 掉了下来,然后我将它向上移动并保持在那里。为什么不掉下来?如何在移动元素后制作 GravityBehavior?

0 投票
1 回答
80 浏览

ios - UIDynamicAnimator 顺序动画

我正在尝试制作从菜单按钮中弹出的按钮(类似于路径上的 + 按钮),并使用 UIDynamicAnimator 为按钮的进出设置动画。它有效,代码非常简单。

这样,所有三个按钮都会一起弹出。我要问的是是否可以使用 UIDynamicAnimator 或其他简单的方法使按钮一个接一个地动画出来?

0 投票
1 回答
694 浏览

ios - 如何在 NSObject 类中添加动态行为:Swift

我正在尝试使用 swift 在 NSObject 类中使用 UIDynamicAnimator 创建具有动态行为的自定义警报视图,而将 UISnapBehaviour 添加到 NSObject 类初始化方法中的视图捕捉行为不起作用,例如查看下面的代码

“TestView”作为子视图添加到“Target”,但捕捉行为不起作用。

我在 ObjectiveC 中尝试了相同的代码

它工作正常,“TestView”捕捉到 TargetView 的中心。我不知道 swift 代码有什么问题。

这是我尝试过的:

  1. 在 UIViewController 类中编码时动态效果工作正常,问题仅在 swift 中子类化 NSObject 时存在。
  2. 我已经尝试过其他动态行为,例如 UIGravityBehavior,同样的问题也存在于 swift 中。
  3. 在 ObjectiveC 对象类中完成了相同的示例工作,它工作正常,我也附上了工作的 ObjC 代码。

似乎问题可能存在于 init 方法或变量 decleration 不确定但是,我不知道如何解决该问题。我已经阅读了互联网上的许多文章。我也搜索过 StackOverflow。请帮忙。

0 投票
1 回答
501 浏览

ios - 使用 UIDynamicBehavior 向 UIView Pan 添加惯性

我正在尝试使用 UIPanGestureRecognizer 平移“blockView”。当平移“结束”时,希望“blockView”以惯性减速,就像 UIScrollView 将以惯性结束滚动一样。

在此处输入图像描述

问题: 当我平移视图时,'blockView' 尝试捕捉到平移起源的原点。当平移“结束”时,它会产生惯性,但它从平移的原点开始(在捕捉到平移原点之后)。

注意: 上面的代码可以正常工作,只是为了 PAN THE VIEW。