gpt4 book ai didi

iphone - 如何在自动旋转期间抑制动画

转载 作者:行者123 更新时间:2023-12-03 19:23:33 24 4
gpt4 key购买 nike

我正在制作一个应用程序,其中一个对象需要在自动旋转期间看起来不移动或旋转,但其他所有对象都需要旋转并重新定位。我这样做的方法是手动旋转对象,并将其移动到旋转之前相对于设备的相同位置。问题是它看起来很有趣,似乎旋转到了之前的相同位置。

如果我在旋转过程中抑制动画效果,则该对象似乎从未移动,而其他所有内容都已卡入到位,这就是我想要的。不过,我在文档中找不到任何内容告诉我如何执行此操作。我该怎么做?

最佳答案

当谈到 UIViewController 旋转时,您可以设置两种方法,以便您有机会旋转和移动自己的 View 。

在一步过程中,在 UIViewController 派生类中提供 willAnimateRotationToInterfaceOrientation 的实现。它被调用,您可以启动对象旋转,因此当系统旋转其他所有对象时,您的对象会反向旋转,因此看起来就像保持原样。您需要根据当前界面方向与新方向计算反向旋转的程度和方向。

另一种方法是收到通知以分两步进行自定义轮换。例如,在前半部分中,您可以缩小对象、移动对象并部分旋转对象,然后在后半部分中完成旋转,同时放大到正常大小。这是一种非常聪明的方法,可以使旋转动画看起来更平滑。

对于两步过程,您需要定义两个方法。 willAnimateFirstHalfOfRotationToInterfaceOrientation 在旋转的前半部分被调用(即,90 度旋转最多 45 度,上下翻转最多 90 度)。一旦超过该点,后半部分将通过 willAnimateSecondHalfOfRotationFromInterfaceOrientation 调用。

如果您的对象具有 1:1 的长宽比(即方形或圆形)并且位于 View 中间,那么一步过程可能会正常工作。但是,如果它是一个非方形对象并且必须移动位置(例如,如果它在纵向中位于位置 40、60,但在横向中移动到 20、100),甚至可能需要一些缩放才能看起来更好,那么您可能需要尝试一下两步过程,看看它是否看起来更流畅。

如果您的对象位于其自己的 UIView 内,那么通过 UIView 动画安排旋转非常容易。只需通过 CGAffineTransformMakeRotation 创建一个变换,然后在一对 UIView beginAnimations/commitAnimations block 中设置 transform 属性对这个值的看法。您可以通过 setAnimationDuration 调整时间。

编辑:根据评论,我添加了一些代码来展示如何将 View 附加到顶级窗口而不是 View Controller 。然后,您的对象将驻留在该 View 中,而不是由 Controller 管理的 View (正在旋转)。您仍然需要重写 UIViewController 旋转方法,但不是在 View Controller 的控制下旋转对象,而是在顶层对象中触发反向旋转。

要将 View 添加到顶级窗口:

YourAppDelegate* windowDelegate = ((YourAppDelegate*) [UIApplication sharedApplication].delegate);
[windowDelegate.window addSubview:yourView];

在您可以到达的地方保留对 yourView 的引用,然后在 UIViewController 的 willAnimateRotationToInterfaceOrientation 中反向旋转 yourView,即计算将 View 反向旋转多少度如果手机顺时针旋转 90 度,您需要将 View 逆时针旋转 90 度,等等。然后在 yourView 上使用 UIView 动画。

关于iphone - 如何在自动旋转期间抑制动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1243353/

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