我在iPad上遇到了所有版本的方向问题。我的应用程序的设计使其支持从ios 6到ios 8。
根据apple的说法, willAnimateRotationToInterfaceOrientation:是从ios8中删除的,我使用 viewWillTransitionToSize:表示ios8。
遇到问题时,我的第一个解决方案是提供宏来确定版本为ios 8或更低版本并相应地执行这些功能。
#ifdef __IPHONE_8_0
// Works on >= version 8.0
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
// my code go here for ios 8
}
#else
// Works on < version 8.0
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration
{
// my code go here when version is below 8.0
}
#endif
我也检查并运行它..我收到了预期的输出。
但据说代码错了..因为我正在尝试将版本检查转换为编译时决策。版本检查必须是RUNTIME决策。 ios7和ios8代码都必须编译成可执行文件。
所以在没有任何版本检查的情况下更改了以下功能:
-(void)viewWillLayoutSubviews
{
[super viewWillLayoutSubviews];
// my code go here without any version check
}
我几乎无法理解 这一行,ios7和ios8代码都必须编译成可执行文件。“ - 这才是真正的意思。
想知道为什么我不应该提供编译时决定?
此外,如果我想这样做...不使用通知..有没有办法通过版本检查在运行时通过调用这些函数来处理?
请允许我对此发表评论。