Files
featherVoice/QXLive/HomePage(声播)/View/房间/QXCabinMovieView.m
2025-08-08 10:49:36 +08:00

132 lines
4.6 KiB
Objective-C

//
// QXCabinMovieView.m
// QXLive
//
// Created by 启星 on 2025/7/7.
//
#import "QXCabinMovieView.h"
#import "AppDelegate.h"
@interface QXCabinMovieView()
@property (nonatomic,strong)UIButton *fullScreenBtn;
@property (nonatomic,strong)UIPanGestureRecognizer *panRecognizer;
@property (nonatomic,strong)QXCabinMovieControlView *controlView;
@end
@implementation QXCabinMovieView
- (instancetype)init
{
self = [super init];
if (self) {
self.frame = CGRectMake(12, NavContentHeight, 280, 160);
self.backgroundColor = RGB16(0x333333);
[self initSubviews];
self.isFullScreen = NO;
}
return self;
}
-(void)initSubviews{
self.panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
[self addGestureRecognizer:self.panRecognizer];
self.videoView = [[UIView alloc] initWithFrame:self.bounds];
[self addSubview:self.videoView];
self.fullScreenBtn = [[UIButton alloc] initWithFrame:CGRectMake(self.width-40, self.height-40, 40, 40)];
[self.fullScreenBtn setImage:[UIImage imageNamed:@"room_full_screen"] forState:(UIControlStateNormal)];
[self.fullScreenBtn addTarget:self action:@selector(fullAction) forControlEvents:(UIControlEventTouchUpInside)];
[self addSubview:self.fullScreenBtn];
// [self.fullScreenBtn mas_makeConstraints:^(MASConstraintMaker *make) {
// make.bottom.right.equalTo(self);
// make.size.mas_equalTo(CGSizeMake(40, 40));
// }];
self.controlView.hidden = YES;
[self addSubview:self.controlView];
}
-(void)handlePan:(UIPanGestureRecognizer*)recognizer{
if (recognizer.state == UIGestureRecognizerStateEnded) {
NSLog(@"拖动结束");
}
CGPoint translation = [recognizer translationInView:self.viewController.view];
CGPoint panCenter = CGPointMake(recognizer.view.center.x + translation.x,
recognizer.view.center.y + translation.y);
if (panCenter.x-214/2 <= 0 || panCenter.x+214/2 >= SCREEN_WIDTH || panCenter.y < kSafeAreaTop || panCenter.y> SCREEN_HEIGHT-kSafeAreaBottom) {
return;
}
recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x,
recognizer.view.center.y + translation.y);
[recognizer setTranslation:CGPointZero inView:self.viewController.view];
}
-(void)fullAction{
AppDelegate *delegate = (AppDelegate*)[UIApplication sharedApplication].delegate;
delegate.allowRotate = 1;
[[UIDevice currentDevice] setValue:@(UIInterfaceOrientationLandscapeRight) forKey:@"orientation"];
[UIViewController attemptRotationToDeviceOrientation];
self.frame = CGRectMake(0, 0, SCREEN_HEIGHT, SCREEN_WIDTH);
self.videoView.frame = self.bounds;
[self.viewController.view addSubview:self.controlView];
self.fullScreenBtn.hidden = YES;
self.controlView.hidden = NO;
self.isFullScreen = YES;
}
-(QXCabinMovieControlView *)controlView{
if (!_controlView) {
_controlView = [[QXCabinMovieControlView alloc] init];
MJWeakSelf
_controlView.returnBlock = ^{
[weakSelf resetView];
};
}
return _controlView;
}
-(void)resetView{
AppDelegate *delegate = (AppDelegate*)[UIApplication sharedApplication].delegate;
delegate.allowRotate = 0;
[[UIDevice currentDevice] setValue:@(UIInterfaceOrientationPortrait) forKey:@"orientation"];
//刷新
[UIViewController attemptRotationToDeviceOrientation];
self.frame = CGRectMake(12, NavContentHeight, 280, 160);
self.videoView.frame = self.bounds;
self.fullScreenBtn.frame = CGRectMake(self.width-40, self.height-40, 40, 40);
self.controlView.hidden = YES;
self.fullScreenBtn.hidden = NO;
self.isFullScreen = NO;
}
@end
@implementation QXCabinMovieControlView
- (instancetype)init
{
self = [super init];
if (self) {
self.frame = CGRectMake(0, 0, SCREEN_HEIGHT, SCREEN_WIDTH);;
[self initSubviews];
}
return self;
}
-(void)initSubviews{
self.topView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.width, 95)];
self.returnBtn = [UIButton buttonWithType:0];
[self.returnBtn setImage:[[UIImage imageNamed:@"back"] imageByTintColor:UIColor.whiteColor] forState:0];
// self.returnBtn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
[self.returnBtn addTarget:self action:@selector(returnBtnClick) forControlEvents:UIControlEventTouchUpInside];
self.returnBtn.frame = CGRectMake(30, 10, 45, 45);
[self.topView addSubview:self.returnBtn];
[self addSubview:self.topView];
}
-(void)returnBtnClick{
if (self.returnBlock) {
self.returnBlock();
}
}
@end