我们先了解下系统转屏相关的回调,和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);