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

125 lines
5.3 KiB
Objective-C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// QXMiniRoomView.m
// QXLive
//
// Created by 启星 on 2025/6/25.
//
#import "QXMiniRoomView.h"
@interface QXMiniRoomView()
@property (nonatomic,strong)UIImageView *bgImageView;
@property (nonatomic,strong)UIImageView *roomCoverImageView;
@property (nonatomic,strong)UIImageView *bgRoomCoverImageView;
@property (nonatomic,strong)UIButton *closeBtn;
@property (nonatomic,strong)UIVisualEffectView *blurView;
@end
@implementation QXMiniRoomView
- (instancetype)init
{
self = [super init];
if (self) {
self.frame = CGRectMake(SCREEN_WIDTH-ScaleWidth(80), SCREEN_HEIGHT-200, ScaleWidth(80), ScaleWidth(44));
[self initSubviews];
}
return self;
}
-(void)initSubviews{
self.bgRoomCoverImageView = [[UIImageView alloc] initWithFrame:self.bounds];
self.bgRoomCoverImageView.contentMode = UIViewContentModeScaleAspectFill;
self.bgRoomCoverImageView.clipsToBounds = YES;
[self addSubview:self.bgRoomCoverImageView];
UIBlurEffect *effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
UIVisualEffectView *blurView = [[UIVisualEffectView alloc] initWithEffect:effect];
UIVibrancyEffect *vibrancyEffect = [UIVibrancyEffect effectForBlurEffect:effect];
UIVisualEffectView *vibrancyView = [[UIVisualEffectView alloc] initWithEffect:vibrancyEffect];
[blurView.contentView addSubview:vibrancyView];
self.blurView = blurView;
[self.bgRoomCoverImageView addSubview:blurView];
blurView.frame = self.bgRoomCoverImageView.bounds;
vibrancyView.frame = self.bgRoomCoverImageView.bounds;
self.bgImageView = [[UIImageView alloc] initWithFrame:self.bounds];
self.bgImageView.image = [UIImage imageNamed:@"mini_room_bg"];
[self addSubview:self.bgImageView];
[self addRoundedCornersWithRadius:ScaleWidth(44) byRoundingCorners:(UIRectCornerTopLeft|UIRectCornerBottomLeft)];
UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
[self addGestureRecognizer:panRecognizer];
self.roomCoverImageView = [[UIImageView alloc] initWithFrame:CGRectMake(9, (ScaleWidth(44)-ScaleWidth(26))/2, ScaleWidth(26), ScaleWidth(26))];
self.roomCoverImageView.contentMode = UIViewContentModeScaleAspectFill;
self.roomCoverImageView.clipsToBounds = YES;
[self.roomCoverImageView addRoundedCornersWithRadius:ScaleWidth(13)];
// [blurView mas_makeConstraints:^(MASConstraintMaker *make) {
// make.left.right.top.bottom.equalTo(self.photoImageView);
// }];
// [vibrancyView mas_makeConstraints:^(MASConstraintMaker *make) {
// make.left.right.top.bottom.equalTo(blurView);
// }];
CABasicAnimation *rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
//旋转角度
rotationAnimation.toValue = [NSNumber numberWithFloat: M_PI];
//每次旋转的时间(单位秒)
rotationAnimation.duration = 4;
rotationAnimation.cumulative = YES;
rotationAnimation.removedOnCompletion = NO;
//重复旋转的次数如果你想要无数次那么设置成MAXFLOAT
rotationAnimation.repeatCount = MAXFLOAT;
[self.roomCoverImageView.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];
MJWeakSelf
[self.roomCoverImageView addTapBlock:^(id _Nonnull obj) {
[weakSelf.layer removeAnimationForKey:@"rotationAnimation"];
[weakSelf removeFromSuperview];
[[QXGlobal shareGlobal] joinRoomWithRoomId:weakSelf.roomId isRejoin:YES navagationController:(UINavigationController*)KEYWINDOW.rootViewController];
}];
[self addSubview:self.roomCoverImageView];
self.closeBtn = [[UIButton alloc] initWithFrame:CGRectMake(self.width-ScaleWidth(30)-12, 0, ScaleWidth(30), ScaleWidth(44))];
UIImage *close = [[UIImage imageNamed:@"room_close"] imageByTintColor:RGB16(0x333333)];
[self.closeBtn setImage:close forState:(UIControlStateNormal)];
[self.closeBtn addTarget:self action:@selector(closeAction) forControlEvents:(UIControlEventTouchUpInside)];
[self addSubview:self.closeBtn];
}
-(void)show{
[KEYWINDOW.rootViewController.view addSubview:self];
}
-(void)setRoomCoverImage:(NSString *)roomCoverImage{
_roomCoverImage = roomCoverImage;
[self.roomCoverImageView sd_setImageWithURL:[NSURL URLWithString:roomCoverImage]];
[self.bgRoomCoverImageView sd_setImageWithURL:[NSURL URLWithString:roomCoverImage]];
}
-(void)closeAction{
[self.layer removeAnimationForKey:@"rotationAnimation"];
[self removeFromSuperview];
[[QXGlobal shareGlobal] quitRoomWithRoomId:self.roomId];
}
-(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.y < kSafeAreaTop || panCenter.y> SCREEN_HEIGHT-kSafeAreaBottom) {
return;
}
recognizer.view.center = CGPointMake(SCREEN_WIDTH-ScaleWidth(80)/2,
recognizer.view.center.y + translation.y);
[recognizer setTranslation:CGPointZero inView:self.viewController.view];
}
@end