IOS 转屏

我们先了解下系统转屏相关的回调,和plist文件

一:系统转屏

1.首先看下plist文件:这一列则表示的是系统支持哪些方向。



2.系统的回调方法

//是否允许自动旋转
- (BOOL)shouldAutorotate
{
    return NO;
}
//支持哪些方向的旋转
- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationLandscapeLeft;
}

3.对于上面的回调方法,我们需要注意,如果你的ViewController 放在Nav里面,则需要设置的是Nav里面的回调

简单来说,如果A页面在nav里面,你这是A页面的shouldAutoratate方法返回NO,它还是会旋转的,你必须在navigationcontroller里面设置sholdAutoratate。


二.自定义转屏

1.禁用自动旋转

//是否允许自动旋转
- (BOOL)shouldAutorotate
{
    return NO;
}

2.通过通知来获取设备方向的变化

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didRotate:) name:UIDeviceOrientationDidChangeNotification object:nil];

3.在didRatate中使用下面的方法,来获取设备的方向。
[UIDevice currentDevice].orientation

4.然后我们需要用到  CGAffineTransform  来完成UI的旋转

下面的方法,是获取到旋转的角度

CGAffineTransform transform = CGAffineTransformMakeRotation([self archForOrientation:orientation]);


//获取旋转角度
- (CGFloat)archForOrientation:(UIInterfaceOrientation)orientation
{
    switch (orientation) {
        case UIInterfaceOrientationPortrait:
            return 0;
            break;
        case UIInterfaceOrientationLandscapeRight:
            return M_PI_2;
            break;
        case UIInterfaceOrientationLandscapeLeft:
            return -M_PI_2;
            break;
        case UIInterfaceOrientationPortraitUpsideDown:
            return 0;
            break;
        default:
            break;
    }
}

5.然后直接设置self.view.transform = transform 即可。 

6.但是这里,我们还是有点问题(1.旋转过来,UI的大小。2.旋转过来,UI的位置)

//中心点
self.playerView.center = self.view.center;
//这里,后面的两个参数,是旋转后,UI的宽,高跟初始化时候的比例,会根据这个比例,来重新拉伸UI来呈现
self.playerView.transform = CGAffineTransformScale(transform, 1.0, 1.0);



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值