Files
yinmeng-ios/xplan-ios/Main/Room/View/AnimationView/XPRoomGameInviteBannerView.m
2023-08-29 17:54:23 +08:00

239 lines
9.0 KiB
Objective-C

//
// XPRoomGameInviteBannerView.m
// xplan-ios
//
// Created by duoban on 2023/8/22.
//
#import "XPRoomGameInviteBannerView.h"
@interface XPRoomGameInviteBannerView()
///背景
@property(nonatomic,strong) UIImageView *bgImageView;
///头部图标
@property(nonatomic,strong) UIImageView *topImageView;
///头像
@property(nonatomic,strong) NetImageView *headVeiw;
///昵称
@property(nonatomic,strong) UILabel *nameView;
///局数
@property(nonatomic,strong) UILabel *inviteView;
///游戏图标
@property(nonatomic,strong) NetImageView *gameIcomView;
///游戏类型
@property(nonatomic,strong) UILabel *gameTypeView;
///立即查看
@property(nonatomic,strong) UIButton *inspectView;
//返回
@property(nonatomic,strong) UIButton *backBtn;
@end
@implementation XPRoomGameInviteBannerView
-(instancetype)initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];
if(self){
[self installUI];
[self installConstraints];
}
return self;
}
-(void)installUI{
[self addSubview:self.bgImageView];
[self.bgImageView addSubview:self.backBtn];
[self.bgImageView addSubview:self.topImageView];
[self.bgImageView addSubview:self.headVeiw];
[self.bgImageView addSubview:self.nameView];
[self.bgImageView addSubview:self.inviteView];
[self.bgImageView addSubview:self.gameIcomView];
[self.bgImageView addSubview:self.gameTypeView];
[self.bgImageView addSubview:self.inspectView];
}
-(void)installConstraints{
[self.bgImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.trailing.equalTo(self).inset(kGetScaleWidth(12));
make.top.bottom.equalTo(self);
}];
[self.topImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.equalTo(self.bgImageView);
make.top.mas_equalTo(kGetScaleWidth(-4));
make.width.mas_equalTo(kGetScaleWidth(122));
make.height.mas_equalTo(kGetScaleWidth(34));
}];
[self.backBtn mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.height.mas_equalTo(kGetScaleWidth(12));
make.top.mas_equalTo(kGetScaleWidth(8));
make.trailing.mas_equalTo(-kGetScaleWidth(10));
}];
[self.headVeiw mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.height.mas_equalTo(kGetScaleWidth(48));
make.leading.mas_equalTo(kGetScaleWidth(20));
make.top.mas_equalTo(kGetScaleWidth(28));
}];
[self.inspectView mas_makeConstraints:^(MASConstraintMaker *make) {
make.trailing.mas_equalTo(-kGetScaleWidth(18));
make.width.mas_equalTo(kGetScaleWidth(80));
make.height.mas_equalTo(kGetScaleWidth(34));
make.top.mas_equalTo(kGetScaleWidth(35));
}];
[self.nameView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.headVeiw.mas_top).mas_offset(kGetScaleWidth(5));
make.leading.equalTo(self.headVeiw.mas_trailing).mas_offset(kGetScaleWidth(10));
make.trailing.equalTo(self.inspectView.mas_leading).mas_offset(-kGetScaleWidth(5));
make.height.mas_equalTo(kGetScaleWidth(20));
}];
[self.inviteView mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.equalTo(self.headVeiw.mas_trailing).mas_offset(kGetScaleWidth(10));
make.top.equalTo(self.nameView.mas_bottom).mas_offset(kGetScaleWidth(2));
make.height.mas_equalTo(kGetScaleWidth(17));
}];
[self.gameIcomView mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.height.mas_equalTo(kGetScaleWidth(16));
make.leading.equalTo(self.inviteView.mas_trailing).mas_offset(kGetScaleWidth(4));
make.centerY.equalTo(self.inviteView);
}];
[self.gameTypeView mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.equalTo(self.gameIcomView.mas_trailing).mas_offset(kGetScaleWidth(4));
make.centerY.equalTo(self.inviteView);
make.trailing.equalTo(self.inspectView.mas_leading).mas_offset(-kGetScaleWidth(5));
}];
}
-(void)show{
[self performSelector:@selector(closeView) withObject:nil afterDelay:3];
}
-(void)closeView{
[self removeFromSuperview];
}
-(void)closeAction{
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(closeView) object:nil];
[self removeFromSuperview];
}
-(void)sendMessageBtnAction{
[self removeFromSuperview];
if(self.delegate && [self.delegate respondsToSelector:@selector(sendGameInviteMessageWithGameInfo:)]){
[self.delegate sendGameInviteMessageWithGameInfo:self.gameInfo];
}
}
-(void)setGameInfo:(UserGameInfoVo *)gameInfo{
_gameInfo = gameInfo;
_headVeiw.imageUrl = _gameInfo.fromAvatar;
_nameView.text = _gameInfo.fromNick;
_gameIcomView.imageUrl = _gameInfo.gameLogo.length > 0 ? _gameInfo.gameLogo : _gameInfo.logo;
_gameTypeView.text = _gameInfo.gameName;
NSMutableAttributedString *textAtt = [[NSMutableAttributedString alloc]initWithString:[NSString stringWithFormat:@"邀请你玩 %@ 局",_gameInfo.inning] attributes:@{NSFontAttributeName:kFontRegular(12),NSForegroundColorAttributeName:[UIColor whiteColor]}];
[textAtt addAttributes:@{NSFontAttributeName:kFontBold(12),NSForegroundColorAttributeName:[UIColor whiteColor]} range:[textAtt.string rangeOfString:_gameInfo.inning]];
_inviteView.attributedText = textAtt;
}
-(UIImage *)setBlurImage:(UIImage *)image{
CIContext *context = [CIContext contextWithOptions:nil];
CIImage * sourceImage = [CIImage imageWithCGImage:image.CGImage];//将图片转换成CIImage
///图片仿射滤镜
CIFilter * clamp = [CIFilter filterWithName:@"CIAffineClamp"];//设置绘制类型
[clamp setValue:sourceImage forKey:kCIInputImageKey];//设置要绘制的图片
CIImage *clampResult = [clamp valueForKey:kCIOutputImageKey];
///高斯模糊滤镜
CIFilter* gaussianBlur = [CIFilter filterWithName:@"CIGaussianBlur"];
[gaussianBlur setValue:clampResult forKey:kCIInputImageKey];
[gaussianBlur setValue:[NSNumber numberWithFloat:1] forKey:@"inputRadius"];//设置模糊值
CIImage * gaussianBlurResult = [gaussianBlur valueForKey:kCIOutputImageKey];
///转化获取图片
CGImageRef cgImage = [context createCGImage:gaussianBlurResult fromRect:[sourceImage extent]];
UIImage * resultImage = [UIImage imageWithCGImage:cgImage];
return resultImage;
}
#pragma mark - 懒加载
- (UIImageView *)bgImageView{
if(!_bgImageView){
_bgImageView = [UIImageView new];
_bgImageView.userInteractionEnabled = YES;
_bgImageView.image = [self setBlurImage:kImage(@"room_game_invite_banner_bg")];
}
return _bgImageView;
}
- (UIImageView *)topImageView{
if(!_topImageView){
_topImageView = [UIImageView new];
_topImageView.image = kImage(@"room_game_invite_banner_top");
_topImageView.userInteractionEnabled = YES;
}
return _topImageView;
}
- (UIButton *)backBtn{
if(!_backBtn){
_backBtn = [UIButton new];
[_backBtn setImage:kImage(@"room_game_invite_banner_back") forState:UIControlStateNormal];
[_backBtn setEnlargeEdgeWithTop:10 right:10 bottom:10 left:10];
[_backBtn addTarget:self action:@selector(closeAction) forControlEvents:UIControlEventTouchUpInside];
}
return _backBtn;
}
- (NetImageView *)headVeiw{
if(!_headVeiw){
NetImageConfig *config = [[NetImageConfig alloc]init];
config.placeHolder = [UIImageConstant defaultEmptyAvatarPlaceholder];
_headVeiw = [[NetImageView alloc]initWithConfig:config];
_headVeiw.layer.cornerRadius = kGetScaleWidth(48)/2;
_headVeiw.layer.masksToBounds = YES;
}
return _headVeiw;
}
- (UILabel *)nameView{
if(!_nameView){
_nameView = [UILabel labelInitWithText:@"" font:kFontSemibold(14) textColor:[UIColor whiteColor]];
}
return _nameView;
}
- (UILabel *)inviteView{
if(!_inviteView){
_inviteView = [UILabel new];
}
return _inviteView;
}
- (NetImageView *)gameIcomView{
if(!_gameIcomView){
NetImageConfig *config = [[NetImageConfig alloc]init];
config.placeHolder = [UIImageConstant defaultEmptyAvatarPlaceholder];
_gameIcomView = [[NetImageView alloc]initWithConfig:config];
_gameIcomView.layer.masksToBounds = YES;
}
return _gameIcomView;
}
- (UILabel *)gameTypeView{
if(!_gameTypeView){
_gameTypeView = [UILabel labelInitWithText:@"" font:kFontSemibold(14) textColor:UIColorFromRGB(0xFFD46C)];
}
return _gameTypeView;
}
- (UIButton *)inspectView{
if(!_inspectView){
_inspectView = [UIButton new];
[_inspectView setBackgroundImage:kImage(@"room_game_invite_banner_inspectView") forState:UIControlStateNormal];
[_inspectView setTitle:@"立即查看" forState:UIControlStateNormal];
[_inspectView setTitleColor:UIColorFromRGB(0x695CEB) forState:UIControlStateNormal];
_inspectView.titleLabel.font = kFontMedium(12);
[_inspectView addTarget:self action:@selector(sendMessageBtnAction) forControlEvents:UIControlEventTouchUpInside];
}
return _inspectView;
}
@end