我在故事板模式下创建了一个通用应用程序。它被设置为自动旋转到当前方向。我试图在iPhone模式下禁用某些方向,但是当我在模拟器中测试时它不起作用。
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
return ((interfaceOrientation != UIInterfaceOrientationLandscapeRight) || (interfaceOrientation != UIInterfaceOrientationLandscapeLeft));
} else {
return YES;
}
}
此外,当iPad旋转时,它应该通过以下代码,但我得到的只是一个黑屏。
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
[super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) {
self.view = landscape;
self.view.transform = CGAffineTransformMakeRotation(deg2rad*(90));
self.view.bounds = CGRectMake(0.0, 0.0, 1024.0, 748.0);
} else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) {
self.view = landscape;
self.view.transform = CGAffineTransformMakeRotation(deg2rad*(-90));
self.view.bounds = CGRectMake(0.0, 0.0, 1024.0, 748.0);
} else {
self.view = portrait;
self.view.transform = CGAffineTransformMakeRotation(0);
self.view.bounds = CGRectMake(0.0, 0.0, 768.0, 1004.0);
}
} else {
}
}
为什么这里出现所有这些问题?我已经尝试了不同的Xcode项目中的代码,没有故事板广告它工作正常。发生了什么,我该如何解决这个问题?
答案 0 :(得分:3)
您应该创建两个单独的stackoverflow问题。我会在这里回答你的第一个问题。
从您的代码中考虑这一行:
return ((interfaceOrientation != UIInterfaceOrientationLandscapeRight) || (interfaceOrientation != UIInterfaceOrientationLandscapeLeft));
如果方向为Right
,则您的代码会缩减为return (Right != Right) || (Right != Left)
,并始终返回true。
如果方向为Left
,则您的代码会缩减为return (Left != Right) || (Left != Left)
,并始终返回true。
如果方向为Up
,则您的代码会缩减为return (Up != Right) || (Up != Left)
,并始终返回true。
如果方向为Down
,则您的代码会缩减为return (Down != Right) || (Down != Left)
,并始终返回true。
目前尚不清楚您想要允许的方向以及要排除的方向。如果您只想允许纵向方向,请执行以下操作:
return UIInterfaceOrientationIsPortrait(interfaceOrientation);
如果您只想允许横向方向,请执行以下操作:
return UIInterfaceOrientationIsLandscape(interfaceOrientation);