iOS强制横屏的两种方式:
第1种:设置状态栏方向,然后vc.view设置transform旋转。注意:VC需要设置为不支持横屏。
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight animated:YES];
[UIView animateWithDuration:0.25
animations:^{
self.view.transform = CGAffineTransformMakeRotation(M_PI/2);
self.view.bounds = CGRectMake(0, 0, [[UIScreen mainScreen] bounds].size.height, [[UIScreen mainScreen] bounds].size.width);
}
completion:^(BOOL finished) {
}];
然后重写VC屏幕旋转方法为只支持竖向:
#pragma mark //屏幕旋转
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
return (toInterfaceOrientation == UIInterfaceOrientationPortrait);
}
- (BOOL)shouldAutorotate {
return NO;
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskPortrait;//只支持这一个方向(正常的方向)
}
第2种:强制横屏的VC需支持屏幕旋转,但只支持横向,其他vc都需要设置自己对屏幕方向的支持。
强制横屏VC最好使用自动布局,或者重写viewWillLayoutSubviews和viewDidLayoutSubviews,实现进行页面布局。
需要强制横屏的VC的屏幕方向支持代码:
#pragma mark 屏幕旋转
//iOS5
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
return (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft||toInterfaceOrientation == UIInterfaceOrientationLandscapeRight);
}
//iOS6+
- (BOOL)shouldAutorotate {
return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskLandscape;
}
其他不需要支持横屏的VC的代码(建议放在BaseVC):
#pragma mark //屏幕旋转
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
return (toInterfaceOrientation == UIInterfaceOrientationPortrait);
}
- (BOOL)shouldAutorotate {
return NO;
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskPortrait;//只支持这一个方向(正常的方向)
}
然后也是最关键的地方如果使用navgationController请使用其子类,并在子类种重写屏幕旋转方法:
#pragma mark //屏幕旋转
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
if ([self.topViewController respondsToSelector:@selector(shouldAutorotateToInterfaceOrientation:)]) {
return [self.topViewController shouldAutorotateToInterfaceOrientation:toInterfaceOrientation];
}
return (toInterfaceOrientation == UIInterfaceOrientationPortrait);
}
- (BOOL)shouldAutorotate {
if ([self.topViewController respondsToSelector:@selector(shouldAutorotate)]) {
return [self.topViewController shouldAutorotate];
}
return NO;
}
- (NSUInteger)supportedInterfaceOrientations {
if ([self.topViewController respondsToSelector:@selector(supportedInterfaceOrientations)]) {
return [self.topViewController supportedInterfaceOrientations];
}
return UIInterfaceOrientationMaskPortrait;//只支持这一个方向(正常的方向)
}
================================
做视频播放时需强制横屏,开始使用第一种方式实现,后因AirPlay选择框显示依然是竖屏方向,改用了第二种方式,建议使用第二种方式。
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-09-27 22:48:50