竖屏转横屏的播放器的一些问题的整理

旋转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 然后 调用自定义的

项目中设置屏幕方向的方案

  1. 目的通用设置中, 设置项目的屏幕方向为在这里插入图片描述
  2. 在代码中实现以下方法
// - 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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值