Files
peko-ios/YuMi/Modules/YMMessage/View/Session/View/SessionNavView.m
2024-04-11 17:05:27 +08:00

258 lines
8.1 KiB
Objective-C

//
// SessionNavView.m
// YUMI
//
// Created by YUMI on 2022/4/25.
//
#import "SessionNavView.h"
///Third
#import <Masonry/Masonry.h>
#import <NIMSDK/NIMSDK.h>
///Tool
#import "DJDKMIMOMColor.h"
#import "YUMIMacroUitls.h"
#import "YUMIConstant.h"
#import "UIImage+Utils.h"
#import "SessionNavLiveView.h"
#import "NIMMessageUtils.h"
///Model
#import "UserInfoModel.h"
@interface SessionNavView ()
///返回按钮
@property (nonatomic,strong) UIButton *backButton;
///用户信息的容器
@property (nonatomic,strong) UIStackView *infoStackView;
///标题
@property (nonatomic,strong) UILabel *nickLabel;
///拉黑 和 直播中的
@property (nonatomic,strong) UIStackView *stackView;
///加入黑名单
@property (nonatomic,strong) UILabel *subTitleLabel;
///直播中
@property (nonatomic,strong) SessionNavLiveView *liveView;
///是否关注
@property (nonatomic,strong) UIButton *likeButton;
///举报
@property (nonatomic,strong) UIButton *reportButton;
@property (nonatomic,copy) NSString *userId;
@end
@implementation SessionNavView
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
[self initSubViews];
[self initSubViewConstraints];
}
return self;
}
#pragma mark - Private Method
- (void)initSubViews {
self.backgroundColor = [DJDKMIMOMColor appCellBackgroundColor];
[self addSubview:self.backButton];
[self addSubview:self.infoStackView];
[self addSubview:self.reportButton];
[self addSubview:self.likeButton];
[self.infoStackView addArrangedSubview:self.nickLabel];
[self.infoStackView addArrangedSubview:self.stackView];
[self.stackView addArrangedSubview:self.subTitleLabel];
[self.stackView addArrangedSubview:self.liveView];
}
- (void)initSubViewConstraints {
[self.backButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.size.mas_equalTo(CGSizeMake(22, 22));
make.leading.mas_equalTo(self).offset(8);
make.top.mas_equalTo(statusbarHeight + 14);
}];
[self.infoStackView mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.mas_equalTo(self);
make.centerY.mas_equalTo(self.backButton);
}];
[self.likeButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.mas_equalTo(self.reportButton);
make.trailing.mas_equalTo(self.reportButton.mas_leading).offset(-12);
make.size.mas_equalTo(CGSizeMake(48, 20));
}];
[self.reportButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.size.mas_equalTo(CGSizeMake(30, 30));
make.trailing.mas_equalTo(self).offset(-15);
make.centerY.mas_equalTo(self.backButton);
}];
}
#pragma mark - Event Response
- (void)reportButtonAction:(UIButton *)sender {
if (self.delegate && [self.delegate respondsToSelector:@selector(sessionNavView:didClickReport:)]) {
[self.delegate sessionNavView:self didClickReport:sender];
}
}
- (void)backButtonAction:(UIButton *)sender {
if (self.delegate && [self.delegate respondsToSelector:@selector(sessionNavView:didClickBack:)]) {
[self.delegate sessionNavView:self didClickBack:sender];
}
}
- (void)likeButtonAction:(UIButton *)sender {
if (self.delegate && [self.delegate respondsToSelector:@selector(sessionNavView:didClickLike:)]) {
[self.delegate sessionNavView:self didClickLike:sender];
}
}
- (void)liveViewRecognizer {
if (self.delegate && [self.delegate respondsToSelector:@selector(sessionNavView:didRoomLive:)]) {
[self.delegate sessionNavView:self didRoomLive:self.userInfo.roomUid];
}
}
#pragma mark - Getters And Setters
- (void)setUserInfo:(UserInfoModel *)userInfo {
_userInfo = userInfo;
if (_userInfo) {
NSString * userId = [NSString stringWithFormat:@"%ld", userInfo.uid];
self.userId = userId;
if (userInfo.nick.length > 0) {
self.title = userInfo.nick;
} else {
[[NIMSDK sharedSDK].userManager fetchUserInfos:@[userId] completion:^(NSArray<NIMUser *> * _Nullable users, NSError * _Nullable error) {
if (!error) {
self.title = users[0].userInfo.nickName;
}
}];
}
self.subTitleLabel.hidden = ![[NIMSDK sharedSDK].userManager isUserInBlackList:userId];
self.liveView.hidden = ([[NIMSDK sharedSDK].userManager isUserInBlackList:userId] || _userInfo.roomUid.length <= 0);
self.reportButton.hidden = [NIMMessageUtils isOfficalAccount:self.userId] || self.isInRoom;
}
}
- (void)setTitle:(NSString *)title {
_title = title;
if (_title) {
NSString * nick = title;
if (nick.length > 10 ) {
nick = [nick substringToIndex:10];
}
self.nickLabel.text = nick;
}
}
- (void)setIsLike:(BOOL)isLike {
_isLike = isLike;
self.likeButton.hidden = _isLike;
}
- (void)setIsInRoom:(BOOL)isInRoom {
_isInRoom = isInRoom;
self.reportButton.hidden = _isInRoom;
self.liveView.hidden = YES;
if (_isInRoom) {
[self.backButton mas_updateConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self).offset(11);
}];
}
}
- (UIButton *)backButton {
if (!_backButton) {
_backButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_backButton setImage:[UIImage imageNamed:@"common_nav_back"] forState:UIControlStateNormal];
[_backButton setImage:[UIImage imageNamed:@"common_nav_back"] forState:UIControlStateSelected];
[_backButton addTarget:self action:@selector(backButtonAction:) forControlEvents:UIControlEventTouchUpInside];
}
return _backButton;
}
- (UIStackView *)infoStackView {
if (!_infoStackView) {
_infoStackView = [[UIStackView alloc] init];
_infoStackView.axis = UILayoutConstraintAxisVertical;
_infoStackView.distribution = UIStackViewDistributionFill;
_infoStackView.alignment = UIStackViewAlignmentCenter;
_infoStackView.spacing = 1;
}
return _infoStackView;
}
- (UIStackView *)stackView {
if (!_stackView) {
_stackView = [[UIStackView alloc] init];
_stackView.axis = UILayoutConstraintAxisHorizontal;
_stackView.distribution = UIStackViewDistributionFill;
_stackView.alignment = UIStackViewAlignmentFill;
_stackView.spacing = 0;
}
return _stackView;
}
- (SessionNavLiveView *)liveView {
if (!_liveView) {
_liveView = [[SessionNavLiveView alloc] init];
_liveView.hidden = YES;
UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(liveViewRecognizer)];
[_liveView addGestureRecognizer:tap];
}
return _liveView;
}
- (UILabel *)nickLabel {
if (!_nickLabel) {
_nickLabel = [[UILabel alloc] init];
_nickLabel.font = [UIFont systemFontOfSize:16 weight:UIFontWeightMedium];
_nickLabel.textColor = [DJDKMIMOMColor mainTextColor];
_nickLabel.textAlignment = NSTextAlignmentCenter;
}
return _nickLabel;
}
- (UIButton *)likeButton {
if (!_likeButton) {
_likeButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_likeButton setTitle:YMLocalizedString(@"SessionNavView0") forState:UIControlStateNormal];
[_likeButton setTitleColor:[DJDKMIMOMColor confirmButtonTextColor] forState:UIControlStateNormal];
_likeButton.titleLabel.font = [UIFont systemFontOfSize:10];
[_likeButton setBackgroundImage:[UIImage gradientColorImageFromColors:@[[DJDKMIMOMColor confirmButtonGradientStartColor], [DJDKMIMOMColor confirmButtonGradientEndColor]] gradientType:GradientTypeLeftToRight imgSize:CGSizeMake(10, 10)] forState:UIControlStateNormal];
_likeButton.layer.masksToBounds = YES;
_likeButton.layer.cornerRadius = 10;
[_likeButton addTarget:self action:@selector(likeButtonAction:) forControlEvents:UIControlEventTouchUpInside];
}
return _likeButton;
}
- (UILabel *)subTitleLabel {
if (!_subTitleLabel) {
_subTitleLabel = [[UILabel alloc] init];
_subTitleLabel.font = [UIFont systemFontOfSize:11];
_subTitleLabel.textColor = [DJDKMIMOMColor secondTextColor];
_subTitleLabel.text = YMLocalizedString(@"SessionNavView1");
_subTitleLabel.hidden = YES;
_subTitleLabel.textAlignment = NSTextAlignmentCenter;
}
return _subTitleLabel;
}
- (UIButton *)reportButton {
if (!_reportButton) {
_reportButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_reportButton setImage:[UIImage imageNamed:@"message_session_nav_report"] forState:UIControlStateNormal];
[_reportButton setImage:[UIImage imageNamed:@"message_session_nav_report"] forState:UIControlStateSelected];
[_reportButton addTarget:self action:@selector(reportButtonAction:) forControlEvents:UIControlEventTouchUpInside];
}
return _reportButton;
}
@end