把礼物动画从舞台的view中移出来 单一职责
This commit is contained in:
367
xplan-ios/Main/Room/View/AnimationView/XPRoomGiftBroadcastView.m
Normal file
367
xplan-ios/Main/Room/View/AnimationView/XPRoomGiftBroadcastView.m
Normal file
@@ -0,0 +1,367 @@
|
||||
//
|
||||
// XPRoomGiftBroadcastView.m
|
||||
// xplan-ios
|
||||
//
|
||||
// Created by 冯硕 on 2021/11/18.
|
||||
//
|
||||
|
||||
#import "XPRoomGiftBroadcastView.h"
|
||||
///Third
|
||||
#import <Masonry/Masonry.h>
|
||||
///Tool
|
||||
#import "ThemeColor+Room.h"
|
||||
#import "XPMacro.h"
|
||||
///Model
|
||||
#import "XPRoomGiftBroadCastModel.h"
|
||||
///View
|
||||
#import "NetImageView.h"
|
||||
|
||||
#define kScreenScale (CGFloat)KScreenWidth / (CGFloat)375
|
||||
|
||||
@interface XPRoomGiftUserView : UIView
|
||||
|
||||
///
|
||||
@property (nonatomic,strong) NetImageView *avatarImageView;
|
||||
///
|
||||
@property (nonatomic,strong) UIImageView *boraderImageView;
|
||||
///
|
||||
@property (nonatomic,strong) UIButton *nickButton;
|
||||
|
||||
@end
|
||||
|
||||
@implementation XPRoomGiftUserView
|
||||
|
||||
- (instancetype)initWithFrame:(CGRect)frame {
|
||||
if (self = [super initWithFrame:frame]) {
|
||||
[self initSubViews];
|
||||
[self initSubViewConstraints];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
#pragma mark - Private Method
|
||||
- (void)initSubViews {
|
||||
[self addSubview:self.avatarImageView];
|
||||
[self addSubview:self.boraderImageView];
|
||||
[self addSubview:self.nickButton];
|
||||
}
|
||||
|
||||
- (void)initSubViewConstraints {
|
||||
[self mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.bottom.mas_equalTo(self.nickButton.mas_bottom);
|
||||
}];
|
||||
|
||||
|
||||
[self.avatarImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.centerX.top.mas_equalTo(self);
|
||||
make.height.width.mas_equalTo(44 * kScreenScale);
|
||||
}];
|
||||
|
||||
[self.boraderImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.size.mas_equalTo(CGSizeMake(51 * kScreenScale, 51 * kScreenScale));
|
||||
make.center.mas_equalTo(self.avatarImageView);
|
||||
}];
|
||||
|
||||
[self.nickButton mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.centerX.mas_equalTo(self);
|
||||
make.top.mas_equalTo(self.avatarImageView.mas_bottom).offset(-8 * kScreenScale);
|
||||
make.size.mas_equalTo(CGSizeMake(66 * kScreenScale, 16 * kScreenScale));
|
||||
}];
|
||||
}
|
||||
|
||||
#pragma mark - Getters And Setters
|
||||
- (NetImageView *)avatarImageView {
|
||||
if (!_avatarImageView) {
|
||||
NetImageConfig * config = [[NetImageConfig alloc]init];
|
||||
config.imageType = ImageTypeUserIcon;
|
||||
_avatarImageView = [[NetImageView alloc] initWithConfig:config];
|
||||
_avatarImageView.userInteractionEnabled = YES;
|
||||
_avatarImageView.layer.masksToBounds = YES;
|
||||
_avatarImageView.layer.cornerRadius = 44 * kScreenScale/2;
|
||||
}
|
||||
return _avatarImageView;
|
||||
}
|
||||
|
||||
- (UIImageView *)boraderImageView {
|
||||
if (!_boraderImageView) {
|
||||
_boraderImageView = [[UIImageView alloc] init];
|
||||
_boraderImageView.userInteractionEnabled = YES;
|
||||
}
|
||||
return _boraderImageView;
|
||||
}
|
||||
|
||||
- (UIButton *)nickButton {
|
||||
if (!_nickButton) {
|
||||
_nickButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
||||
[_nickButton setTitleColor:[ThemeColor giftBroadcastNickColor] forState:UIControlStateNormal];
|
||||
_nickButton.titleLabel.font = [UIFont systemFontOfSize:10];
|
||||
[_nickButton setBackgroundImage:[UIImage imageNamed:@"room_gift_broadcast_avatar_board"] forState:UIControlStateNormal];
|
||||
}
|
||||
return _nickButton;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@interface XPRoomGiftBroadcastView ()
|
||||
///背景
|
||||
@property (nonatomic,strong) UIImageView *backImageView;
|
||||
///赠送者
|
||||
@property (nonatomic,strong) XPRoomGiftUserView *sendView;
|
||||
///赠送
|
||||
@property (nonatomic,strong) UIImageView *sendImageView;
|
||||
///接收者
|
||||
@property (nonatomic,strong) XPRoomGiftUserView *receiveView;
|
||||
///礼物
|
||||
@property (nonatomic,strong) NetImageView *giftImageView;
|
||||
///数量
|
||||
@property (nonatomic,strong) UILabel *countLabel;
|
||||
///关闭
|
||||
@property (nonatomic,strong) UIButton *closeButton;
|
||||
@end
|
||||
|
||||
@implementation XPRoomGiftBroadcastView
|
||||
|
||||
- (instancetype)initWithFrame:(CGRect)frame
|
||||
{
|
||||
self = [super initWithFrame:frame];
|
||||
if (self) {
|
||||
[self initSubViews];
|
||||
[self initSubViewConstraints];
|
||||
[self initEvents];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
#pragma mark - Response
|
||||
- (void)closeButtonAction:(UIButton *)sender {
|
||||
if (self.delegate && [self.delegate respondsToSelector:@selector(xPRoomGiftBroadcastView:didClickClose:)]) {
|
||||
[self.delegate xPRoomGiftBroadcastView:self didClickClose:self.broadcastModel];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)didClickEnterRoom {
|
||||
if (self.delegate && [self.delegate respondsToSelector:@selector(xPRoomGiftBroadcastView:enterRoom:)]) {
|
||||
[self.delegate xPRoomGiftBroadcastView:self enterRoom:[NSString stringWithFormat:@"%ld", self.broadcastModel.roomUid]];
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark - Private Method
|
||||
- (void)initSubViews {
|
||||
[self addSubview:self.backImageView];
|
||||
|
||||
[self.backImageView addSubview:self.closeButton];
|
||||
[self.backImageView addSubview:self.sendView];
|
||||
[self.backImageView addSubview:self.sendImageView];
|
||||
[self.backImageView addSubview:self.receiveView];
|
||||
[self.backImageView addSubview:self.giftImageView];
|
||||
[self.backImageView addSubview:self.countLabel];
|
||||
}
|
||||
|
||||
- (void)initSubViewConstraints {
|
||||
CGFloat kscale = (CGFloat)125/ (CGFloat)345;
|
||||
CGFloat width = KScreenWidth - 30;
|
||||
|
||||
[self.backImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.right.mas_equalTo(self).inset(15);
|
||||
make.top.mas_equalTo(self);
|
||||
make.height.mas_equalTo(width * kscale);
|
||||
}];
|
||||
|
||||
[self.sendView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.top.mas_equalTo(self.backImageView).offset(41 * kScreenScale);
|
||||
make.width.mas_equalTo(66 * kScreenScale);
|
||||
make.left.mas_equalTo(self.backImageView).offset(13 * kScreenScale);
|
||||
}];
|
||||
|
||||
[self.sendImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.size.mas_equalTo(CGSizeMake(30 * kScreenScale, 15 * kScreenScale));
|
||||
make.centerY.mas_equalTo(self.sendView);
|
||||
make.left.mas_equalTo(self.sendView.mas_right).offset(13 * kScreenScale);
|
||||
}];
|
||||
|
||||
[self.receiveView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.centerY.width.mas_equalTo(self.sendView);
|
||||
make.left.mas_equalTo(self.sendImageView.mas_right).offset(13 * kScreenScale);
|
||||
}];
|
||||
|
||||
[self.giftImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.size.mas_equalTo(CGSizeMake(60 * kScreenScale, 60 * kScreenScale));
|
||||
make.centerY.mas_equalTo(self.sendView);
|
||||
make.left.mas_equalTo(self.receiveView.mas_right).offset(13 * kScreenScale);
|
||||
}];
|
||||
|
||||
[self.countLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.mas_equalTo(self.giftImageView.mas_right).offset(13 * kScreenScale);
|
||||
make.centerY.mas_equalTo(self.sendView);
|
||||
}];
|
||||
|
||||
[self.closeButton mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.right.mas_equalTo(self.backImageView).offset(-3);
|
||||
make.top.mas_equalTo(13);
|
||||
make.size.mas_equalTo(CGSizeMake(28, 22));
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)initEvents {
|
||||
UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didClickEnterRoom)];
|
||||
[self.backImageView addGestureRecognizer:tap];
|
||||
}
|
||||
|
||||
- (void)updateSubviews:(BroadCastLevel)level {
|
||||
NSString * nickBackImageName;
|
||||
UIColor * nickColor;
|
||||
NSString * bgImageName;
|
||||
switch (level) {
|
||||
case BroadCastLevel_Normal:
|
||||
{
|
||||
CGFloat kscale = (CGFloat)124/ (CGFloat)345;
|
||||
CGFloat width = KScreenWidth - 30;
|
||||
[self.backImageView mas_updateConstraints:^(MASConstraintMaker *make) {
|
||||
make.height.mas_equalTo(width * kscale);
|
||||
}];
|
||||
|
||||
[self.closeButton mas_updateConstraints:^(MASConstraintMaker *make) {
|
||||
make.top.mas_equalTo(14 * kScreenScale);
|
||||
}];
|
||||
nickBackImageName = @"room_gift_broadcast_normal_nick_bg";
|
||||
nickColor = [ThemeColor mainTextColor];
|
||||
bgImageName = @"room_gift_broadcast_low_bg";
|
||||
}
|
||||
break;
|
||||
case BroadCastLevel_Middle:
|
||||
{
|
||||
CGFloat kscale = (CGFloat)120/ (CGFloat)345;
|
||||
CGFloat width = KScreenWidth - 30;
|
||||
[self.backImageView mas_updateConstraints:^(MASConstraintMaker *make) {
|
||||
make.height.mas_equalTo(width * kscale);
|
||||
}];;
|
||||
|
||||
[self.closeButton mas_updateConstraints:^(MASConstraintMaker *make) {
|
||||
make.top.mas_equalTo(11 * kScreenScale);
|
||||
}];
|
||||
|
||||
nickBackImageName = @"room_gift_broadcast_higher_nick_bg";
|
||||
nickColor = [ThemeColor giftBroadcastNickColor];
|
||||
bgImageName = @"room_gift_broadcast_middle_bg";
|
||||
}
|
||||
break;
|
||||
case BroadCastLevel_High:
|
||||
{
|
||||
CGFloat kscale = (CGFloat)143/ (CGFloat)345;
|
||||
CGFloat width = KScreenWidth - 30;
|
||||
[self.backImageView mas_updateConstraints:^(MASConstraintMaker *make) {
|
||||
make.height.mas_equalTo(width * kscale);
|
||||
}];
|
||||
|
||||
[self.closeButton mas_updateConstraints:^(MASConstraintMaker *make) {
|
||||
make.top.mas_equalTo(33 * kScreenScale);
|
||||
}];
|
||||
|
||||
nickBackImageName = @"room_gift_broadcast_higher_nick_bg";
|
||||
nickColor = [ThemeColor giftBroadcastNickColor];
|
||||
bgImageName = @"room_gift_broadcast_high_bg";
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (nickBackImageName.length > 0) {
|
||||
[self.sendView.nickButton setBackgroundImage:[UIImage imageNamed:nickBackImageName] forState:UIControlStateNormal];
|
||||
[self.receiveView.nickButton setBackgroundImage:[UIImage imageNamed:nickBackImageName] forState:UIControlStateNormal];
|
||||
}
|
||||
|
||||
if (nickColor) {
|
||||
[self.sendView.nickButton setTitleColor:nickColor forState:UIControlStateNormal];
|
||||
[self.receiveView.nickButton setTitleColor:nickColor forState:UIControlStateNormal];
|
||||
}
|
||||
|
||||
self.backImageView.image = [UIImage imageNamed:bgImageName];
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - Getters And Setters
|
||||
- (void)setBroadcastModel:(XPRoomGiftBroadCastModel *)broadcastModel {
|
||||
_broadcastModel = broadcastModel;
|
||||
if (_broadcastModel) {
|
||||
if (broadcastModel.sendUserNick.length > 6) {
|
||||
broadcastModel.sendUserNick = [broadcastModel.sendUserNick substringToIndex:6];
|
||||
}
|
||||
self.sendView.avatarImageView.imageUrl = broadcastModel.sendUserAvatar;
|
||||
[self.sendView.nickButton setTitle:broadcastModel.sendUserNick forState:UIControlStateNormal];
|
||||
|
||||
if (broadcastModel.recvUserNick.length > 6) {
|
||||
broadcastModel.recvUserNick = [broadcastModel.recvUserNick substringToIndex:6];
|
||||
}
|
||||
self.receiveView.avatarImageView.imageUrl = broadcastModel.recvUserAvatar;
|
||||
[self.receiveView.nickButton setTitle:broadcastModel.recvUserNick forState:UIControlStateNormal];
|
||||
|
||||
self.giftImageView.imageUrl = broadcastModel.giftUrl;
|
||||
self.countLabel.text = [NSString stringWithFormat:@"x%ld", broadcastModel.giftNum];
|
||||
|
||||
[self updateSubviews:broadcastModel.levelNum];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
- (UIImageView *)backImageView {
|
||||
if (!_backImageView) {
|
||||
_backImageView = [[UIImageView alloc] init];
|
||||
_backImageView.userInteractionEnabled = YES;
|
||||
}
|
||||
return _backImageView;
|
||||
}
|
||||
|
||||
- (XPRoomGiftUserView *)sendView {
|
||||
if (!_sendView) {
|
||||
_sendView = [[XPRoomGiftUserView alloc] init];
|
||||
}
|
||||
return _sendView;
|
||||
}
|
||||
|
||||
- (UIImageView *)sendImageView {
|
||||
if (!_sendImageView) {
|
||||
_sendImageView = [[UIImageView alloc] init];
|
||||
_sendImageView.userInteractionEnabled = YES;
|
||||
_sendImageView.image = [UIImage imageNamed:@"room_gift_broadcast_send"];
|
||||
}
|
||||
return _sendImageView;
|
||||
}
|
||||
|
||||
- (XPRoomGiftUserView *)receiveView {
|
||||
if (!_receiveView) {
|
||||
_receiveView = [[XPRoomGiftUserView alloc] init];
|
||||
}
|
||||
return _receiveView;
|
||||
}
|
||||
- (NetImageView *)giftImageView {
|
||||
if (!_giftImageView) {
|
||||
NetImageConfig * config = [[NetImageConfig alloc]init];
|
||||
config.imageType = ImageTypeUserIcon;
|
||||
_giftImageView = [[NetImageView alloc] initWithConfig:config];
|
||||
}
|
||||
return _giftImageView;
|
||||
}
|
||||
|
||||
- (UILabel *)countLabel {
|
||||
if (!_countLabel) {
|
||||
_countLabel = [[UILabel alloc] init];
|
||||
_countLabel.font = [UIFont fontWithName:@"PingFang-SC-Heavy" size:20];
|
||||
_countLabel.textColor = [ThemeColor giftBroadcastNumberColor];
|
||||
}
|
||||
return _countLabel;
|
||||
}
|
||||
|
||||
- (UIButton *)closeButton {
|
||||
if (!_closeButton) {
|
||||
_closeButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
||||
[_closeButton setImage:[UIImage imageNamed:@"room_gift_broadcast_close"] forState:UIControlStateNormal];
|
||||
[_closeButton setImage:[UIImage imageNamed:@"room_gift_broadcast_close"] forState:UIControlStateSelected];
|
||||
[_closeButton addTarget:self action:@selector(closeButtonAction:) forControlEvents:UIControlEventTouchUpInside];
|
||||
}
|
||||
return _closeButton;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@end
|
Reference in New Issue
Block a user