dji*_*i33 9 iphone objective-c rotation ios ios7
我已经阅读了很多关于SO的答案,但我似乎无法在iOS7上进行自动旋转.
我只需要一个视图控制器来旋转,所以我不想在我的Info.plist中设置旋转设置.
据我了解Apple的文档,单个视图控制器可以通过简单地覆盖两个方法来覆盖全局旋转设置(来自Info.plist).Info.plist设置为仅允许Portrait,我的视图控制器实现以下方法:
- (NSUInteger)supportedInterfaceOrientations
{
NSLog(@"%s", __PRETTY_FUNCTION__);
return UIInterfaceOrientationMaskAllButUpsideDown;
}
- (BOOL)shouldAutorotate
{
NSLog(@"%s", __PRETTY_FUNCTION__);
return true;
}
Run Code Online (Sandbox Code Playgroud)
我在旋转时看到那些NSLog语句但没有旋转.
如果我使用正确的旋转设置配置Info.plist,我的视图将旋转,但如果我尝试依赖我的视图控制器则不会.
不确定它是否重要,但我试图旋转的视图来自使用自动布局的.xib.
此外,我的ViewController以模态方式呈现,并包含在导航控制器中.我试过单独呈现视图控制器,但这不起作用.我也尝试在UINavigationController中添加一个类别,以便从它的topViewController获取它的自动旋转方向.
Nat*_*ink 17
就我而言,我有一个新的iOS7应用程序,已经创建了大约30个视图控制器.我只需要在一个模态视图控制器上进行自动旋转.我不想更新预先存在的视图控制器.
我在plist中选择了我想要的方向:

然后我在UIViewController上为我的app委托添加了一个类别:
@implementation UIViewController (rotate)
-(BOOL)shouldAutorotate {
return NO;
}
@end
Run Code Online (Sandbox Code Playgroud)
然后在单模态视图控制器中我想要旋转我添加了这个方法:
-(BOOL)shouldAutorotate {
return YES;
}
Run Code Online (Sandbox Code Playgroud)
我还发现,如果我的视图控制器不是模态VC,我需要在UINavigationController上添加类别方法,对于根视图控制器之后的所有VC,作为视图控制器的导航堆栈的一部分 - 类似于这个:https://stackoverflow.com/a/20283331/396429
Ala*_*977 16
简单,但它工作得很好.IOS 7.1和8
AppDelegate.h
@property () BOOL restrictRotation;
Run Code Online (Sandbox Code Playgroud)
AppDelegate.m
-(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
if(self.restrictRotation)
return UIInterfaceOrientationMaskPortrait;
else
return UIInterfaceOrientationMaskAll;
}
Run Code Online (Sandbox Code Playgroud)
视图控制器
-(void) restrictRotation:(BOOL) restriction
{
AppDelegate* appDelegate = (AppDelegate*)[UIApplication sharedApplication].delegate;
appDelegate.restrictRotation = restriction;
}
Run Code Online (Sandbox Code Playgroud)
viewDidLoad中
[self restrictRotation:YES]; or NO
Run Code Online (Sandbox Code Playgroud)
您需要将plist值设置为所有可能的值,然后根据需要限制它们(在Navigation Controllers和TabBar控制器中.来自UIViewController类描述:
在iOS 6及更高版本中,您的应用程序支持应用程序的Info.plist文件中定义的界面方向.视图控制器可以覆盖supportedInterfaceOrientations方法以限制支持的方向列表.通常,系统仅在窗口的根视图控制器或呈现的视图控制器上调用此方法以填充整个屏幕; 子视图控制器使用由父视图控制器为其提供的窗口部分,不再直接参与有关支持哪些旋转的决策.应用程序的方向遮罩和视图控制器的方向遮罩的交点用于确定视图控制器可以旋转到哪个方向.
| 归档时间: |
|
| 查看次数: |
18955 次 |
| 最近记录: |