- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试从两级轮换切换到一级轮换(以避免控制台警告,并且因为 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/
我正在尝试使用范围输入元素构建一个 slider ,该元素在单击、滚动或长按(连续按下)时移动 1 步。我有点击和滚动所需的逻辑,但是相同的逻辑似乎不适用于鼠标按下事件(长按/连续按下)。 到目前为止
我正在编写一个跟踪其他程序执行情况的程序。我正在使用动态指令检测来跟踪 x86 的 CMP 指令的行为。 我正在使用 Windows 调试 API 来控制被调试程序的行为。我使用“仅调试此进程”标志启
我有以下代码片段。 我有点困惑,首先,为什么我的步骤参数是2,是不是因为我从字典之外跳转,所以我最终得到了总人口? 第二:i+1 到底是做什么的?以前没见过吗?如果我从 i (国家名称)跳到总人口上,
如果我同时拥有公钥和私钥,如何使用 everyauth 通过 node.js 执行非常简单的 oauth 身份验证?与多步骤 facebook 类型的身份验证不同,我只想使用 everyauth 进行
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 2年前关闭。 Improve thi
我是一名优秀的程序员,十分优秀!