我在方法中有以下代码。当我在模拟器中运行它时,调试器会直接跳过代码??我错过了什么?
if (([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft) ||
([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight))
{
} else {
}
我在方法中有以下代码。当我在模拟器中运行它时,调试器会直接跳过代码??我错过了什么?
if (([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft) ||
([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight))
{
} else {
}
确定界面方向的最佳方法是查看状态栏方向:
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
if(orientation == UIInterfaceOrientationPortrait ||
orientation == UIInterfaceOrientationPortraitUpsideDown) {
//Portrait orientation
}
if(orientation == UIInterfaceOrientationLandscapeRight ||
orientation == UIInterfaceOrientationLandscapeLeft) {
//Landscape orientation
}
UIDevice
类基于加速度计测量方向,如果设备平放,它将不会返回正确的方向。
请注意,有一个宏UIDeviceOrientationIsLandscape
and UIDeviceOrientationIsPortrait
,因此与其将其分别与 LandscapeLeft 和 LandscapeRight 进行比较,不如这样做:
if (UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation))
{
}
更新 2
这应该没关系,但请尝试打开方向通知:
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(detectOrientation) name:@"UIDeviceOrientationDidChangeNotification" object:nil];
更新
我的错,我以为它是空的。
尝试删除 or 语句并仅测试单个方向。看看能不能解决。也许有一个支架问题或一些愚蠢的事情。
我在生产代码中进行了以下测试,因此您的技术应该可以工作:
if (([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft) ||
([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight)) {
}
原始答案
您必须将语句实际放入 if 块中才能使其介入。
调试器足够聪明,可以跳过空块。
在不打开方向通知的情况下执行此操作的另一种方法是
第 1 步:将当前方向保存在局部变量中myCurrentOrientation
,并像这样分配它:
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
duration:(NSTimeInterval)duration
{
myCurrentOrientation = toInterfaceOrientation;
}
第 2 步:用于myCurrentOrientation
您的支票
if (UIInterfaceOrientationIsLandscape(myCurrentOrientation) == YES) {
// landscape
}
else {
// portrait.
}
嘿,您需要[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]
在获取值之前调用。查看此方法的文档。我花了一段时间才找到这个。
假设您在 Springboard 调整中并希望根据当前应用程序的方向显示某些内容,那么您可以使用它(仅限越狱):
UIInterfaceOrientation o = [[UIApplication sharedApplication] _frontMostAppOrientation];
我建议您使用我突出显示的代码而不是您的代码来保护某些行代码。
-(void) viewDidLoad
{
[super viewDidLoad];
[self rotations];
}
-(void)rotations
{
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(orientationChanged:)
name:UIDeviceOrientationDidChangeNotification
object:nil];
}
-(void) orientationChanged:(NSNotification *)notification
{
//USE THIS PART
//USE THIS PART
//USE THIS PART
//USE THIS PART
//USE THIS PART
if (UIDeviceOrientationIsPortrait([UIDevice currentDevice].orientation))
{
}
}
代替
if([[UIDevice currentDevice] orientation] == UIInterfaceOrientationPortrait ||
[[UIDevice currentDevice] orientation] == UIInterfaceOrientationPortraitUpsideDown)
{
}
这是一种查找屏幕方向和真实中心的方法。我使用了 Tuszy 的方法,所以我可以正确设置 UIActivityIndicatorView。
- (BOOL) isPortraitOrientation {
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
if(orientation == UIInterfaceOrientationPortrait ||
orientation == UIInterfaceOrientationPortraitUpsideDown) {
return true;
}
if(orientation == UIInterfaceOrientationLandscapeRight ||
orientation == UIInterfaceOrientationLandscapeLeft) {
return false;
}
return false;
}
以及获得中心的方法...
- (void) findMyUIViewCenter {
CGPoint myCenter;
if ([self isPortraitOrientation]) {
myCenter = self.view.center;
}
else {
myCenter = CGPointMake(self.view.frame.size.height / 2.0, self.view.frame.size.width / 2.0);
}
NSLog(@"true center -- x:%f y:%f )",myCenter.x,myCenter.y);
}