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

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];
    }];

2.由于播放器的 view 比较多 容易出现视图层级的问题(新增加的视图希望在下层) 这里用到的方法是给每个 view 设置一个 level 然后 调用自定义的addsubview 的方法 从而避免这个为题(这里是给 view 增加一个类别,然后调用类别中的方法)

/** view 的视图层级 */
@property (nonatomic, assign)NSInteger viewLv;

/** 调整视图的层级 */
-(void)adjustSubViewsLv:(UIView *)aView;
/** view 的视图层级的 setter */
-(void)setViewLv:(NSInteger)viewLv{
    objc_setAssociatedObject(self, [@"viewLv" UTF8String], @(viewLv), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

/** view 的视图层级的 getter */
- (NSInteger)viewLv{
    return [(NSNumber *)objc_getAssociatedObject(self, [@"viewLv" UTF8String]) integerValue];
}
/** 调整视图的层级 */
-(void)adjustSubViewsLv:(UIView *)aView{

    /** 排序插入 */
    __block UIView *tempView = nil;
    [self.subviews enumerateObjectsUsingBlock:^(UIView* obj, NSUInteger idx, BOOL * _Nonnull stop) {
        if (obj.viewLv > aView.viewLv) {
            tempView = obj;
            *stop = YES;
        }
    }];
    tempView ? [self insertSubview:aView belowSubview:tempView] : [self addSubview:aView];
}

猜你喜欢

转载自blog.csdn.net/qq_27074387/article/details/80264567