问题标签 [uikit-dynamics]

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 投票
2 回答
327 浏览

ios - 更新 UISnapBehavior 点

在我的应用程序中,我有一些可以通过拖动来移动的小视图。当用户开始拖动其中一个小视图时,它会保持原位,但会“拉伸”一定距离(约 200 点)。超过距离后,小视图应该对用户的手指执行“捕捉”效果。整个动画最好被描述为橡皮筋断裂。

到目前为止,我已经像这样实现了快照效果:

问题是,如果用户在执行快照动画时继续移动他们的手指,则视图会继续移动到效果开始时手指所在的位置。

移动触摸时有什么方法可以更新 UISnapBehavior 的目的地吗?

0 投票
1 回答
1216 浏览

ios - 如何使自定义过渡表现得像在重力下坠落?

效果可以像animateTransition方法中的以下代码一样实现:

但是我如何使用重力和碰撞行为(UIGravityBehaviorUICollisionBehavior)来实现它?

一个更普遍的问题可能是“如何使用 来自UIDynamicAnimator定义 之间的转换UIViewControllers?”

0 投票
0 回答
315 浏览

ios - UIKit Dynamics Pop 模态视图控制器

我想展示一个带有自定义 Segue 的模态视图控制器,包括 UIKit Dynamics。

rdelmar 在这篇文章https://stackoverflow.com/a/23039173/1016102中复制了以下代码,并尝试根据我的需要对其进行修改。

可悲的是,我的目的地控制器出现在错误的位置,并且在碰撞后直接消失。

我想在下面的草图中获得一些结果。

控制器应该从底部弹出,并且应该与顶部边缘对齐。 假设距离顶部 3/4 的空间。

实际上我的用户界面是这样的:我点击“+”按钮来触发我的自定义segue,黑色框直接在橙色导航栏下方弹出。它不会像草图中那样从橙色框的底部边框弹出。它只是出现并随着顶部弹出而消失。

我应该编辑什么来实现这一点?

0 投票
0 回答
48 浏览

ios - 无法访问 UIGravityBehaviour 的方法

我在看 WWDC Video Advanced Techniques with UIKit Dynamics。我试图通过解释如何使用UIDynamics. 创建UIGravityBehavior将时,他们还使用我无法访问的方法(第二行):

我还找到了一个Github项目,您可以在其中看到UIGravityBehavior. 那里的方法是可用的。我不明白为什么在视频中调用该方法。这只是解释应用程序运行时会发生什么,还是我必须实现特定delegate的才能访问它?

0 投票
1 回答
74 浏览

ios - 使用 Interface Builder 时的 UIKitDynamics

我想使用 UIKitDynamics 为一些按钮添加动画,但是使用 UISnapBehaviour 做非常基础的操作根本不起作用。我正在使用 IB 来布局我的所有子视图,所以请记住,我不能通过调用 self.button.frame 重新定位任何东西,你必须使用约束。

这就是我所拥有的......当我运行动画时,它会快速闪烁并且看起来很糟糕。

0 投票
0 回答
109 浏览

objective-c - UICollisionBehavior 在横向模式下不起作用

我有两种方法,setupAnimationstartAnimating。我正在使用 UIDynamics,特别是 4 个单独UIDynamicAnimators的,4 个单独的,UIGravityBehaviors每个单独包含一个项目(因为每个项目的重力方向不同),另外一个UIDynamicAnimator包含我的所有项目和一个UICollisionBehavior.

这是我的代码:

这是我的viewWillAppear方法。我把这两种动画方法放在这里是为了尝试使用更新的横向边界,但它仍然不起作用。

我的viewDidLoad方法:

这是我的两种动画方法:

setupAnimation

startAnimating

我遇到了有关横向模式和视图边界的问题。

基本上,项目正确地出现在屏幕上,并且重力行为正确地应用于它们。但是,当它们撞到视图“墙”或边界时不会发生碰撞。我在这个视图控制器上也有一个模态展开 segue。我有一件重力向上的物品。当我在项目向上移动时点击按钮启动 segue时,我看到与视图边界发生冲突。

我怀疑这与视图控制器生命周期有关,并且未设置视图边界viewDidLoad,但我不完全确定如何修复它。请帮忙!

编辑:这是 NSLogs 显示的内容:

0 投票
1 回答
780 浏览

ios - UIKit 动态旋转图像

如何实现动画效果,例如通过按住一个角来提升和放下物体。例如,当一个箱子从地板上抬起一个角时,箱子的底层会倾斜到某个角度,反之亦然,需要在回到地板上时适用。

在此处输入图像描述

我正在根据触摸区域将锚点添加到图像中并库存下一步该做什么。

感谢您提供答案/建议以实现这一目标。

0 投票
1 回答
141 浏览

ios - UIKit 动力学中的 CGGeometry 计算

我有一个使用 UiKit 动态实现的简单游戏。游戏中有块(红色的)与网格对齐,如下图所示。块从顶部落下并停留在底部网格中

在此处输入图像描述

假设使用参考 1 调用底部网格行,我想检查块在哪个网格参考中。我通过使用 CGGeomentry、CGRectContainsPoint([grid frame] 来执行此操作,然后将网格编号即 1 分配给块。如上图所示,它适用于单个块。

现在看第二张图。

在此处输入图像描述

一旦第二个块堆叠在第一个块的顶部,您会注意到网格第 2 行和第二个块之间的间隙。一旦有更多的块堆叠在一起,这个间隙就会增加。由于这个间隙,CGRectContainsPoint 计算为超过 6 的网格行给出了错误的网格数。

换句话说,第一个块应该分配网格第 1 行,第二个块应该分配网格第 2 行。由于块的帧大小和网格帧大小相同,因此对于块 10 或块 100 应该是正确的。但是因为这个间隙,经过一些街区后,网格分配看起来不对,即街区 6 将网格编号设为 5。

我正在使用 UIKit 动力学重力行为来使块从顶部掉落,并使用碰撞行为来确定碰撞。我什至将弹性属性设置为 0.0 以降低弹性。

我的问题是为什么当网格框架大小和块框架大小相同时我会得到这个许可。他们不应该完全适合吗?我怎样才能摆脱这个许可?

当更多的块堆叠在下面的图片中时,你可以看到间隙越来越大 在此处输入图像描述

谢谢

0 投票
2 回答
1669 浏览

ios - iOS:UIDynamicAnimator updateItemUsingCurrentState 不适用于旋转

我正在尝试手动更改UIDynamics视图的旋转,但视图的旋转总是在更新后重置。文档说, that的方法应该更新项目UIDynamicAnimatorupdateItemUsingCurrentState:位置和旋转,但只更新位置。
我创建了一个简短的示例,其中一个方形视图从屏幕上落下,触摸后它应该定位到触摸的位置并旋转 45 度。但是,不会发生旋转(有时旋转可以在几分之一秒内看到,但之后会再次重置):

(我把所有的代码都留在这里了,这样你就可以把它复制粘贴到一个新创建的项目中。希望没有太多不相关的代码让人不安)

那我做错了吗?或者是否可以显式更改视图的旋转?

0 投票
1 回答
1079 浏览

ios - 我应该删除行为一个 UIPushBehavior - 我添加了许多推送

我有一个小 UIView,它在一个盒子里弹跳。我正在添加一个瞬时模式。推。事实上,我添加了非常多的推动——5 或更多赫兹。

神秘:

(1)我必须删除行为吗???? 如果是这样..什么时候?!?“之后”是“瞬间”?

(2) UIPushBehaviorModeInstantaneous 是不是一个特例,你不必(或不能)删除那些?

(3)当您添加行为时:是否..保留?!UIPushBehavior?或者??怎么回事?!

(4) 我似乎无法在任何地方找到这些方面的文档!

{注意:每次我需要一个时,我都会简单地分配 UIPushBehavior 。请注意,如果您尝试使用“just one”作为属性,则它不起作用。事实上,Rob 在下面解释了原因。}


解决方案

经过极其广泛的测试,我们发现 Rob 使用 .action 的“第二种”解决方案基本上是完美的。

再次经过大量测试后,我们强烈建议以下代码确实是“解决方案”,是编写重复推送的唯一方法。感谢 Rob:/