Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2676035
  • 博文数量: 877
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 5921
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-05 12:25
个人简介

技术的乐趣在于分享,欢迎多多交流,多多沟通。

文章分类

全部博文(877)

文章存档

2021年(2)

2016年(20)

2015年(471)

2014年(358)

2013年(26)

分类: iOS平台

2015-10-30 21:10:47


iOS8的屏幕旋转的问题,菜鸟求问   

从横屏界面切换到竖屏界面,之前用的代码没有强制竖屏的效果了

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation

{

    return toInterfaceOrientation == UIDeviceOrientationPortrait;

}



- (BOOL)shouldAutorotate

{

    return NO;

}



- (NSUInteger)supportedInterfaceOrientations

{

    return UIInterfaceOrientationMaskPortrait;

}

现在在iOS8上该怎么进行强制设定屏幕旋转的方向呢


 


另外:在已知屏幕方向改变frame后,进行


[[[[[UIApplication sharedApplication] keyWindow] subviews] objectAtIndex:0] addSubview:bgView];


在iOS7 上完全正常,在iOS8上也没有了效果,就是视图的一部分只出现在屏幕左侧,屏幕右侧什么都没有,也无法解决


 


求各路大神伸出你们的爱心右手,帮忙解决下啊!!!菜鸟跪求。。。


 


juny
级别: 新手上路
UID: 237411
精华: 0 
发帖: 9
可可豆: 18 CB
威望: 18 点
在线时间: 280(时)
注册时间: 2013-08-13
最后登录: 2015-09-28
沙发 :发表于: 2014-10-15 13:39   发自: Web Page
     
遇到了同样的问题,正在解决中,搞了一天了,还没找到方法 
级别: 新手上路
UID: 335231
精华: 0 
发帖: 11
可可豆: 20 CB
威望: 23 点
在线时间: 148(时)
注册时间: 2014-06-29
最后登录: 2015-10-22
板凳 :发表于: 2014-10-15 14:17   发自: Web Page
     
找到方法求告知~>Q<~,非常感谢 
juny
级别: 新手上路
UID: 237411
精华: 0 
发帖: 9
可可豆: 18 CB
威望: 18 点
在线时间: 280(时)
注册时间: 2013-08-13
最后登录: 2015-09-28
3 楼: 发表于: 2014-10-15 14:29   发自: Web Page
     

if ([[UIDevice currentDevicerespondsToSelector:@selector(setOrientation:)])


            


        {


            NSNumber *num = [[NSNumber alloc] initWithInt:(m_bScreen?UIInterfaceOrientationLandscapeRight:UIInterfaceOrientationPortrait)];


            


            [[UIDevice currentDeviceperformSelector:@selector(setOrientation:) withObject:(id)num];


            [UIViewController attemptRotationToDeviceOrientation];//这行代码是关键


            


        }


        SEL selector=NSSelectorFromString(@"setOrientation:");


        


        NSInvocation *invocation =[NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]];


        [invocation setSelector:selector];


        [invocation setTarget:[UIDevice currentDevice]];


        int val =m_bScreen?UIInterfaceOrientationLandscapeRight:UIInterfaceOrientationPortrait;


        [invocation setArgument:&val atIndex:2];




        [invocation invoke];




m_bScreen是bool 型,判断横竖屏。




这个方法能够旋转屏幕,但是我需要状态栏也旋转,这样,状态栏不能旋转。而用[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight];状态栏能旋转成横屏,但右边的button无法点击


级别: 新手上路
UID: 335231
精华: 0 
发帖: 11
可可豆: 20 CB
威望: 23 点
在线时间: 148(时)
注册时间: 2014-06-29
最后登录: 2015-10-22
4 楼: 发表于: 2014-10-15 15:39   发自: Web Page
     
这个是设置vc旋转的么,我初始化调用没有效果 
级别: 新手上路
UID: 274310
精华: 0 
发帖: 1
可可豆: 1 CB
威望: 1 点
在线时间: 105(时)
注册时间: 2013-11-19
最后登录: 2015-10-12
5 楼: 发表于: 2014-11-11 17:57   发自: Web Page
     
他说要求10个子哦。
[ 此帖被pig帮帮主在2015-07-29 14:17重新编辑 ]

级别: 新手上路
UID: 430371
精华: 0 
发帖: 4
可可豆: 4 CB
威望: 4 点
在线时间: 28(时)
注册时间: 2015-01-17
最后登录: 2015-09-08
6 楼: 发表于: 2015-03-31 15:22   发自: Web Page
     
今天也遇到和楼主一样的问题,请问你当时是怎么解决的呢?不胜感激! 
级别: 新手上路
UID: 335231
精华: 0 
发帖: 11
可可豆: 20 CB
威望: 23 点
在线时间: 148(时)
注册时间: 2014-06-29
最后登录: 2015-10-22
7 楼: 发表于: 2015-04-08 12:23   发自: Web Page
     
VC旋转设置:
- (void)viewDidLoad {
    [super viewDidLoad];
    [UIApplication sharedApplication].statusBarHidden = YES;
    UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
    if (UIInterfaceOrientationIsLandscape(orientation)) {
        if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0) {
            webViewWidth = MainScreenWidth;
            webViewHeight = MainScreenHeight;
        } else {
            webViewWidth = MainScreenHeight;
            webViewHeight = MainScreenWidth;
        }
    } else {
        webViewWidth = MainScreenWidth;
        webViewHeight = MainScreenHeight;
    }
    
    [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait];

}
//隐藏状态栏
- (BOOL)prefersStatusBarHidden{
    return YES;
}

//横竖屏
- (BOOL)shouldAutorotate {
    
    UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
    if (UIInterfaceOrientationIsPortrait(orientation)) {
        // 如果状态栏竖着的,不支持controller的旋转
        return NO;
    } else if (UIInterfaceOrientationIsLandscape(orientation)) {
        return YES;
    }
    return NO;
}

// 第二个方法直接返回支持的旋转方向,该方法在iPad上的默认返回值是UIInterfaceOrientationMaskAll,iPhone上的默认返回值是UIInterfaceOrientationMaskAllButUpsideDown
- (NSUInteger)supportedInterfaceOrientations {
    UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
    
    if (UIInterfaceOrientationIsLandscape(orientation)) {
        return UIInterfaceOrientationMaskLandscape;
    }
    return UIInterfaceOrientationMaskPortrait;
}
抱歉啊,忘记这个帖子了。。
使用VC旋转通过statusBarOrientation的方向判断旋转方向,
webView是我创建的一个满屏的控件
在iOS8之前横屏后,屏幕的宽和高的数值是对换了(即宽变成了高,高变成了宽),
但在iOS8之后宽高并没有对换,所以在iOS8之后旋转横屏如果不改变宽高的话就会造成屏幕一侧为空的情况.
代码是之前写的了,可能会有些乱。。。 
级别: 新手上路
UID: 142319
精华: 0 
发帖: 24
可可豆: 60 CB
威望: 24 点
在线时间: 102(时)
注册时间: 2012-05-11
最后登录: 2015-10-27
8 楼: 发表于: 2015-04-08 13:27   发自: Web Page
     
你可以在AppDelegate里写以下方法试试
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
    return UIInterfaceOrientationMaskLandscape;

级别: 新手上路
UID: 360114
精华: 0 
发帖: 33
可可豆: 110 CB
威望: 106 点
在线时间: 479(时)
注册时间: 2014-08-14
最后登录: 2015-10-30
9 楼: 发表于: 2015-04-08 14:32   发自: Web Page
     
横竖屏切换建议换成push而别在一个navigationController里面pop 
阅读(947) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~