gpt4 book ai didi

iphone - 使用单步旋转时如何实现流畅的动画/如何在旋转开始时获取新的帧大小?

转载 作者:太空狗 更新时间:2023-10-30 03:59:13 26 4
gpt4 key购买 nike

我正在尝试从两级轮换切换到一级轮换(以避免控制台警告,并且因为 Apple 建议这样做,因为一级更快)。

但是我无法弄清楚如何尽早获得我的 View 的新大小(考虑到导航栏、状态栏等)以在动画期间执行我的 UI 更新(而不是简单地捕捉正如许多应用程序所做的那样,项目在末尾移动到它们的新位置,这会导致在动画结束时出现一个大的“ SCSS ”)。

我在 willAnimateRotationToInterfaceOrientation:duration: 方法中得到的尺寸是(显然)旧尺寸。

我可以看到我应该能够手动计算它,计算出当前的条形高度,然后通过从旋转的屏幕尺寸中扣除那些来推断新的 View 框架大小? (这并不难,但可能很脆弱,因为它假定导航栏、状态栏等在两个方向上的高度相同,并且您必须手动考虑工具栏在不同方向上的高度不同肖像与风景 - 我只是想确保我没有错过更直接或更常见的方式。)

任何对其他人所采用的方法的反馈都会很棒!

谢谢

约瑟夫

最佳答案

我使用 View 的 layoutSubviews 方法进行自动旋转取得了最大的成功。当在方向更改期间调用 layoutSubviews 时, View 的边界已经设置为旋转结束时的边界。你也可以在这个时候查询状态栏、导航栏和工具栏的大小并获得正确的旋转后值(虽然状态栏的宽度和高度可能会交换——我只是取较小的值作为高度,效果很好)。使用该信息,您可以布置 subview ,然后它们将作为旋转的一部分进行动画处理。

为每种情况创建一个 UIView 子类可能很烦人,所以我创建了一个特殊的 UIView 子类,称为 DelegatingView,如下所示:

@protocol DelegatingViewDelegate

- (void)layoutSubviewsForView:(UIView*)view;

@end

@interface DelegatingView : UIView {
id<DelegatingViewDelegate> _delegate;
}

@property (nonatomic,assign) id<DelegatingViewDelegate> delegate;

@end

@implementation DelegatingView

@synthesize delegate = _delegate;

- (void)layoutSubviews {
[super layoutSubviews];
[_delegate layoutSubviewsForView:self];
}

@end

我将其用作我的基础 View ,向其添加 subview ,并将我的 UIViewController 设置为委托(delegate)。然后我可以从我的 View Controller 布局 subview ,访问当前方向等等。

关于iphone - 使用单步旋转时如何实现流畅的动画/如何在旋转开始时获取新的帧大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3493850/

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