问题标签 [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 投票
1 回答
492 浏览

ios - 为什么我无法检测到我使用 UIKit Dynamics 推离屏幕的 UIView 何时不再可见?

我正在使用 UIKit Dynamics 将 UIView 推离屏幕,类似于 Tweetbot 在其图像叠加层中执行它的方式。

我使用 a UIPanGestureRecognizer,当他们结束手势时,如果他们超过速度阈值,它就会离开屏幕。

当我的视图实际上完全从屏幕上消失时,我很难检测到。

我的观点是设置相当简单。它是一个里面UIScrollView有一个UIImageView。两者都在一个UIViewController. 我UIScrollView使用平移手势移动 ,但想检测图像视图何时离开屏幕。

action块中,我可以在视图移动时对其进行监视,并且我尝试了两种方法:

1.每次action调用块时,找到图像视图的最低点y。将其转换为视图控制器的参考点,当我向上“抛出”视图时,我只是想查看y转换点的值何时小于 0(负)。(这意味着视图中的最低点已经越过y了视图控制器参考点的负值,该参考点位于视图控制器的可见区域之上。)

这工作得很好,除了x我给的价值lowestPoint真的把一切都搞砸了。如果我选择最小的 X,即最左边的 X,它只会告诉我左下角何时离开UIView屏幕。通常情况下,视图可以根据用户从哪里推动而旋转,右下角可能会在左下角之后离开屏幕,使其过早检测到它。如果我选择中间 X,它只会告诉我中间底部何时消失,等等。我似乎不知道如何告诉它“只要给我绝对最低的 y 值。

2.我按照上面的代码尝试过CGRectIntersectsRect,它从来没有说它在外面,即使在它在任何可见区域之外拍摄几秒钟后也是如此。

我究竟做错了什么?我应该如何检测它不再可见?

0 投票
1 回答
168 浏览

ios - 如何找到使用 UIAttachmentBehavior 拖动的 UIView 的最低点或最高点?

根据 的位置anchorPointUIAttachmentBehavior视图可以完全旋转,因此它更像是菱形而不是正方形。在这些情况下,它旋转了 90°,我如何找到它的最低点或最高点UIView(相对于窗口)?

UIView当是(非旋转)正方形时,这很容易,因为我可以只使用CGRectGetMaxY(或最小值)并且 x 值无关紧要,然后使用convertPoint,但是随着旋转,x 值似乎具有真正的重要性,好像我选择 maxX,它会告诉我右下角的点,而 minX 会告诉我左下角的点。

我只想要UIView. 我怎么得到这个?

编辑:这是一些代码,显示了我目前如何尝试它:

convertPoint 的 y 值的跟踪完全取决于我为lowestPoint's中的 x 值提供的内容CGPointMake

0 投票
0 回答
962 浏览

ios - UICollectionView UIKit Dynamics “drop in” 与集合视图相同的动态反弹

想象一个 UICollectionView,

在此处输入图像描述

(显示两个项目)

我正在为 UIKit Dynamics 使用流行的 BPXLFlowLayout(注意我的评论,如何在 iOS 7 中复制弹跳气泡的消息

我希望 N 个项目从屏幕顶部“放入”并在到达时反弹。但,

我希望插入和反弹使用相同的动态,因为集合视图正在使用

可接受但不理想的解决方法:只需使用 usingSpringWithDamping 放入整个视图:

例如,https://stackoverflow.com/a/23926712/294884

但是,当您用手指移动项目时,不使用集合视图正在使用的相同 Dynamics 似乎是“错误的”。

(显然,使用 SpringWithDamping,没有“内部弹簧”:整个集合视图只是作为一个单元反弹。)

我已经为此投入了几个小时:您认为这就像将列表定位在顶部、屏幕外,然后使用 scrollToItemAtIndexPath: 但不,我根本无法做到这一点。

0 投票
0 回答
1923 浏览

ios - 使用 CollectionView 复制 iOS7 消息应用程序 UIKitDynamics

我知道有很多关于如何使用 UIKitDynamics 实现有弹性的 collectionViewLayout 的教程和讨论。

甚至还有一个 WWDC 13 Session 视频解决了在 iOS7 消息应用程序中复制“消息气泡”的确切主题。

我在会议视频之后创建了自己的“弹性布局”,并使用本教程,该教程还提供了实现平铺机制的详细信息,即使有数千个单元格,也能确保事情顺利运行。

但是,结果仍然与我们在消息应用程序中看到的非常不同,我的目标是复制与消息应用程序完全相同的行为。

  1. 无论我为UIAttachmentBehavior属性(长度、阻尼、频率)提供多少不同的值,我都无法正确地弹跳。
    会话视频说,将长度设置为 > 0 会破坏事情,因为单元格不会返回到它们的实际位置。但是,我只能通过将长度设置为 ~0.5 来重现消息应用程序显示的平滑和快速减速?
  2. 当 collectionView 到达它的边界时,Messages 应用程序中的最后几个气泡会出现一个很好的夸张反弹,而我的“教程实现”根本没有反弹。

开发者论坛中有一个讨论:Apple Dev Forums Discussion

一些人建议每个单元格使用多个 UIAttachmentBehaviors,其他人说应用 UIView - spring Animations 可以给你这种想要的效果。甚至假设 Messages App 根本不使用 UIKitDynamics + UICollectionView。(我怀疑苹果没有为此使用这种明显的技术)

所以我的问题是:有没有人成功实现了消息气泡行为的精确复制?我还能做些什么来获得有关此主题的答案?

0 投票
1 回答
189 浏览

ios - How to avoid dynamics deformation using UIDynamicAnimator

I have a simple tetris-like app where I am dropping square colored labels from the top of the view and they pile up once they collide with the bottom border of the window.

I am using the iOS dynamics framework to simulate the gravity and the collision. I have 2 questions:

  1. How can I eliminate completely the bouncing effect when the blocs collide with the bottom border? I have tried setting the elasticity of the collision behaviour to 0 ( the documentation say that this implies no bouncing at all) but the blocs still bounce a bit. So I guess it is a bug in the documentation at least. can anybody confirm this before someone will suggest to try other workarounds?

    Another technique I have tried are to set a very high resistance when the object starts the collision and resetting it to low resistance when the collision ends. The problem with this approach is that this behaviour which is generic for all the blocks, would cause the other falling blocks to be affected ( and slowed down) every time there is a collision happening at the bottom

  2. the second question is about how can I stop the animation engine to squeeze the blocks while the pile up ( simulating the real-world effect of gravity over non completely rigid bodies) In my app I can clearly see that the blocks are not aligned because they get squeezed up by the weight of the blocks above.

    How can I avoid this behaviour? I have tried to set the density to 1 and the elasticity to 0 without luck.

    I have also noticed that some blocks at the bottom have the y coordinate = 481 which means that they have been pushed out of their parent view. How is this possible given that the bottom is considered as a collision boundary?

0 投票
3 回答
769 浏览

ios - 在 UICollectionView 中禁用 UIAttachmnetBehavior 的垂直移动

我正在尝试在水平 UICollectionView 中模拟消息应用程序弹簧动画

我在 UICollectionViewFlowLayout 子类中使用了 UIAttachmentBehavior。但问题是当我水平滚动时,单元格也会以某种方式垂直和水平移动!

在此处输入图像描述

在此处输入图像描述

我遵循了本教程:
使用 uikitdynamics 实现有弹性的 uicollectionviewlayout

并在我的 collectionView 中使用。我还关注了 WWDC 2013 session 217-Exploring Scroll Views on iOS 7。但问题仍然存在!
有谁知道我应该如何解决这个问题?

0 投票
0 回答
136 浏览

ios - 重新加载数据时,在 UICollectionViewFlowLayout 中将动画师设置回零?

换句话说——你怎么知道,在 UICollectionViewFlowLayout中,关联的集合视图何时重新加载了数据?


我正在使用BPXLFlowLayoutBrandon Alexander 的流行和真棒,

https://github.com/whilethis/UIKit-Dynamics-101/blob/master/Collection%20View%20Dynamics/Collection%20View%20Dynamics/BPXLFlowLayout.m

这是制作“有弹性”集​​合的最佳方式,例如 iOS 消息应用程序。

如何在 iOS 7 中复制弹跳气泡的消息

我在 BPXLFlowLayout 和其他 UICollectionViewFlowLayout 方法中发现了一个真正的问题。通常,您只在一个布局、一个集合视图中“使用它们一次”。假设您有一个集合视图“BouncyViewHouses”

使用 BPXLFlowLayout

一切都很好,直到你重新加载。或者让我感到困惑的是,如果您在另一个集合视图上使用相同的 BPXLFlowLayout,您似乎遇到了同样的问题。

要解决这个问题,你必须做这样的事情

每当您重新加载集合时,您必须“手动”将动画师归零。

因此,例如在 BPXLFlowLayout 中,我添加了一个新方法......

当我重新加载数据源时,我必须从集合视图中手动调用它。

(如果你不这样做,你会遇到很难解决的非常棘手的问题!)

我的问题..你会认为在 BPXLFlowLayout (或类似的)中你可以调用self.animator = nil;

在里面-(void)prepareLayout或者也许shouldInvalidateLayoutForBoundsChange:

但它不起作用!我尝试了所有方法,总之,当数据源重新加载到关联的集合视图上时,我无法弄清楚 UICollectionViewFlowLayout 中的“触发了什么”。

我想这是可能的,在 UICollectionViewFlowLayout 中真正触发了 NOTHING .. 在这种情况下,我的方法是添加手动痒痒,当你重新加载数据时“必须调用”它,我想这是唯一的方法。

0 投票
1 回答
2350 浏览

ios - 摇一个 UIView ...但使用 UIKit Dynamics

在很多情况下,您需要“摇动”一个 UIView。

(例如,“将孩子的注意力吸引到控件上”、“连接速度慢”、“用户输入错误”等等。)

使用 UIKit Dynamics 可以做到这一点吗?

所以你必须..

  • 取景,例如在 0,0

  • 添加弹簧概念

  • 轻推一下,说“向左”

  • 它应该在弹簧上前后摆动,最终再次稳定到 0,0

这可能吗?我在 Apple 演示中找不到示例。干杯

请注意,正如 Niels 在下面敏锐地解释的那样,对于某些情况,弹簧不一定是您想要的“物理感觉”:在其他情况下,它可能是完美的。据我所知, iOS 自己的应用程序(例如消息等)中的所有物理特性现在都使用 UIKit 动态,所以对我来说,处理“UIView 在弹簧上弹跳”是值得的。


为了清楚起见,你当然可以做一些“类似”的事情,只需要一个动画。例子...

但这根本没有与 iOS 其他部分相同的“物理感觉”,现在。

0 投票
1 回答
850 浏览

ios - UIKit Dynamics 的性能问题

最近,当我在玩 Stuart Hall 的 UIKit Dynamics 教程 ( http://stuartkhall.com/posts/flipcase-bounce-in-uikit-dynamics ) 时,我发现存在性能问题。

在我向动画师添加了大约 50 个项目(弹跳球)后,应用程序变得非常缓慢——几乎冻结了。分析显示 [UIDynamicAnimator _animatorStep] 占用了 96% 的 CPU。

有人知道如何提高具有大量 UIDynamicItems 的 UIKit Dynamics 应用程序的性能吗?

您可以下载我的代码并自己查看性能问题:

https://www.dropbox.com/s/zy7ajj6molxm9up/Flipper-UIKit-Dynamics-Poor-Performance.zip

以下是一切发生的代码:

0 投票
0 回答
576 浏览

swift - Swift 中的 UIGravityBehavior 动作

我目前正在实现 UIGravityBehavior 以将菜单从底部移动到在顶部停止的屏幕,当再次按下按钮时,我希望它向后移动并在底部消失。

当显示菜单并再次按下按钮时,我执行以下操作

我试过以下

但我收到以下错误无法将表达式的类型 '$T4' 转换为类型 '@lvalue (() -> Void)!'

还尝试在屏幕外设置碰撞边界,但显然它也不起作用。

非常感谢大家。