gpt4 book ai didi

ios6 - iOS 6 横向和纵​​向

转载 作者:行者123 更新时间:2023-12-02 04:59:50 26 4
gpt4 key购买 nike

我有一个表格,其中包含来自 plist 文件的大量内容,单击每个内容都会进入一个新 View ,即 xib。

我在 .xib 中有 2 个 View ,一个用于纵向,一个用于横向

在我的 h 文件中我有这个:

IBOutlet UIView *portraitView;  
IBOutlet UIView *landscapeView;

@property (nonatomic, retain) IBOutlet UIView *portraitView;
@property (nonatomic, retain) IBOutlet UIView *landscapeView;

在我的 m 文件中:

[super viewDidLoad];  
// Do any additional setup after loading the view from its nib.

[[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;
}
}

- (void)viewDidUnload
{

[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if (UIInterfaceOrientationIsPortrait(interfaceOrientation)) {

self.view = portraitView;
} else if (UIInterfaceOrientationIsLandscape(interfaceOrientation)) {

self.view = landscapeView;
}
return YES;

}

@end

一切都在 iOS 5 中完美运行,在需要时显示横向或纵向。

现在,随着 iOS 6 的更新,一切都变得一团糟。

如果我在表格(纵向) View 中并单击一个项目,它会以纵向显示正确的 View ,如果我旋转到横向, View 也会显示正确的 View ,但是在横向 View 中,如果我返回到表并选择另一个项目,它显示纵向 View 而不是横向 View 。

如果我做同样的事情,但开始横向,它会显示纵向。

所以,现在定向没有任何作用。

我使用 Storyboard的其他 View 也会发生同样的情况。它们是纵向的并且总是这样显示,现在它们旋转,缩小所有内容并将我的应用程序留下作为垃圾。

1-如何解决 .xib 方向问题?
2-如何修复 Storyboard方向? (它们是静态的,现在一切都在旋转(根本没有代码))

谢谢。

最佳答案

我认为我有一个解决方法。它很丑,但它正在工作......对于 iOS6,Apple 现在建议使用 2 个不同的 XIB 文件在纵向和横向 View 之间切换。

但是,如果您想通过在 2 个 UIView IBOutlet 之间“切换”来使用 iOS 5.0 中允许的先前方法,您可以尝试我的丑陋的工作解决方案。这个想法是根据方向旋转 View 。

1)在你的viewDidLoad中,订阅方向通知:

- (void)viewDidLoad
{
[super viewDidLoad];
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:@"UIDeviceOrientationDidChangeNotification" object:nil];
}

2)添加通知调用的方法:

-(void)orientationChanged:(NSNotification *)object{
NSLog(@"orientation change");
UIDeviceOrientation deviceOrientation = [[object object] orientation];
if(deviceOrientation == UIInterfaceOrientationPortrait || deviceOrientation == UIInterfaceOrientationPortraitUpsideDown){
self.view = self.potraitView;
if(deviceOrientation ==UIInterfaceOrientationPortraitUpsideDown){
NSLog(@"Changed Orientation To PortraitUpsideDown");
[self portraitUpsideDownOrientation];
}else{
NSLog(@"Changed Orientation To Portrait");
[self portraitOrientation];
}
}else{
self.view = self.landscapeView;
if(deviceOrientation ==UIInterfaceOrientationLandscapeLeft){
NSLog(@"Changed Orientation To Landscape left");
[self landscapeLeftOrientation];
}else{
NSLog(@"Changed Orientation To Landscape right");
[self landscapeRightOrientation];
}

}
}

3)最后,为每个方向添加旋转方法:

-(void)landscapeLeftOrientation{

// Rotates the view.
CGAffineTransform transform = CGAffineTransformMakeRotation(-(3.14159/2));
self.view.transform = transform;
// Repositions and resizes the view.
CGRect contentRect = CGRectMake(0, 0, 480, 320);
self.view.bounds = contentRect;
}
-(void)landscapeRightOrientation{

// Rotates the view.
CGAffineTransform transform = CGAffineTransformMakeRotation(3.14159/2);
self.view.transform = transform;
// Repositions and resizes the view.
CGRect contentRect = CGRectMake(0, 0, 480, 320);
self.view.bounds = contentRect;
}
-(void)portraitOrientation{

// Rotates the view.
CGAffineTransform transform = CGAffineTransformMakeRotation(0);
self.view.transform = transform;
// Repositions and resizes the view.
CGRect contentRect = CGRectMake(0, 0, 320, 480);
self.view.bounds = contentRect;
}
-(void)portraitUpsideDownOrientation{

// Rotates the view.
CGAffineTransform transform = CGAffineTransformMakeRotation(3.14159);
self.view.transform = transform;
// Repositions and resizes the view.
CGRect contentRect = CGRectMake(0, 0, 320, 480);
self.view.bounds = contentRect;
}

我建议你制作一个自定义的 UIViewController 类并继承该类以节省冗余代码。如果您想同时支持 ios5 和 ios6 的解决方案,您可以使用 #endif 宏将这两个代码包含在您的 Controller 中。

干杯

关于ios6 - iOS 6 横向和纵​​向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12565188/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com