旋转view, 但是不旋转屏幕方向的方案
1.这里 如果没有中间包的这层allBgView 而是直接把playControlBgView 增加到 self 上 就会出现 self 旋转了 但是 playControlBgView的位置没变
/** 三个大的分类的 view 的父视图 */
-(UIView *)allBgView{
if(!_allBgView){
UIView *allBgView = [[UIView alloc] initWithFrame:self.bounds];
[self addSubview:allBgView];
_allBgView = allBgView;
}
return _allBgView;
}
/** 暂停 声音 进度等控制按钮的背景的 view */
- (DYContainerBgView *)playControlBgView{
if(!_playControlBgView){
DYContainerBgView *playControlBgView = [[DYContainerBgView alloc] init];
playControlBgView.viewLv = DYVideoPlayerViewLv3;
[self.allBgView adjustSubViewsLv:playControlBgView];
_playControlBgView = playControlBgView;
[playControlBgView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.top.bottom.equalTo(self.allBgView);
}];
}
return _playControlBgView;
}
/** 旋转切换 frame 和父视图 */
[self removeFromSuperview];
UIView *keyW = [UIApplication sharedApplication].keyWindow;
[keyW addSubview:self];
[[UIDevice currentDevice] setValue:[NSNumber numberWithInteger:UIDeviceOrientationLandscapeLeft] forKey:@"orientation"];
[[UIApplication sharedApplication] setStatusBarOrientation: UIInterfaceOrientationLandscapeRight animated: NO];
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
[self updateConstraintsIfNeeded];
[UIView animateWithDuration:0.3 animations:^{
self.transform = CGAffineTransformMakeRotation(M_PI / 2);
self.frame = CGRectMake(0, 0, keyW.width, keyW.height);
self.allBgView.frame = self.bounds;
}completion:^(BOOL finished) {
self.fullScreen = YES;
self.zoomScreenBtn.selected = YES;
[self.gestureRecognizerBgView addGestureRecognizer:self.panGesture];
}];
1.由于播放器的 view 比较多 容易出现视图层级的问题 这里用到的方法是给每个 view 设置一个 level 然后 调用自定义的
项目中设置屏幕方向的方案
- 目的通用设置中, 设置项目的屏幕方向为
- 在代码中实现以下方法
// - 2.1. 在NavVC 或者 TabVC 中设置屏幕旋转和支持的屏幕方向
// - 这里 shouldAutorotate 必须为YES, 否则在plus设备中有问题
- (BOOL)shouldAutorotate{
return YES;
}
- (UIInterfaceOrientationMask)supportedInterfaceOrientations{
if ([self.topViewController respondsToSelector:@selector(supportedInterfaceOrientations)]) {
return [self.topViewController supportedInterfaceOrientations];
}
return UIInterfaceOrientationMaskPortrait;
}
// - 2.2 在竖屏的vc中实现以下方法
- (UIInterfaceOrientationMask)supportedInterfaceOrientations{
return UIInterfaceOrientationMaskPortrait;
}
// - 2.3 在需要横屏的位置实现以下代码
- (void)viewDidLoad {
[super viewDidLoad];
[self setInterfaceOrientation:UIDeviceOrientationLandscapeRight];
}
- (void)setInterfaceOrientation:(UIDeviceOrientation)orientation {
if ([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)]) {
[[UIDevice currentDevice] setValue:[NSNumber numberWithInteger:UIDeviceOrientationPortrait] forKey:@"orientation"];
[[UIDevice currentDevice] setValue:[NSNumber numberWithInteger:orientation] forKey:@"orientation"];
}
}
- (UIInterfaceOrientationMask)supportedInterfaceOrientations{
return UIInterfaceOrientationMaskLandscapeRight;
}