我想让我的项目支持完全定位。 我在xcode 4.2上 我的实现给了我一个警告:
这就是代码:
#import "OrientationTutorialViewController.h"
@implementation OrientationTutorialViewController
@synthesize portraitView, landscapeView;
- (void)viewDidLoad
{
[super viewDidLoad];
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:@"UIDeviceOrientationDidChangeNotification" object:nil];
}
- (void) orientationChanged:(id)object
{
UIInterfaceOrientation interfaceOrientation = [[object object] orientation];
if (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)
{
self.view = self.portraitView;
}
else
{
self.view = self.landscapeView;
}
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return YES;
}
- (void)dealloc
{
[super dealloc];
}
@end
有没有办法解决此警告?
答案 0 :(得分:3)
我猜你从this tutorial复制了这段代码。这表明只是从互联网上的一些随机人员复制和粘贴代码的危险。
此代码存在一些问题。首先,您在此处描述的问题是UIDeviceOrientationDidChangeNotification
通知传回UIDevice,其-orientation
方法返回UIDeviceOrientation
枚举。出于某种原因,此代码的作者将该值分配给UIInterfaceOrientation
枚举,而不是将其作为UIDeviceOrientation
值处理。这可以通过使用适当的枚举类型并与这些值进行比较来解决。
其次,当他们使用UIViewController委托方法-didRotateFromInterfaceOrientation:
时,为什么他们会使用通知进行方向更改?这确实传递了UIInterfaceOrientation
枚举。我建议使用-didRotateFromInterfaceOrientation:
替换上面的通知和响应方法。有关如何执行此操作,请参阅Apple的许多视图控制器自动旋转示例以及丰富的文档。
第三,如果他们要让方法响应通知,就像上面的-orientationChanged:
一样,它应该采用NSNotification对象,而不仅仅是通用ID。
答案 1 :(得分:0)
check out this post,它解释得很好。
另外,如果需要,你可以投射你的方向。
deviceOrientation = (UIDeviceOrientation)[UIApplication sharedApplication].statusBarOrientation;
答案 2 :(得分:0)
我尝试了很多这些替代方案,然后我发现除了添加
之外,您还必须确保将变量Initial interface orientation
更改为您想要的内容。
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation{
return (self.interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}
您的实施文件中的某个地方。只是片段在开始时工作,但是当添加更多视图和控制器时,这一切都搞砸了,直到我更改了.plist。