Files
yinmeng-ios/xplan-ios/Main/Room/View/RoomHeaderView/RoomHeaderView.m

386 lines
14 KiB
Mathematica
Raw Normal View History

2021-10-14 21:10:04 +08:00
//
// XPRoomInfoView.m
// xplan-ios
//
// Created by on 2021/10/11.
//
#import "RoomHeaderView.h"
2021-10-14 21:10:04 +08:00
///Third
#import <NIMSDK/NIMSDK.h>
2021-10-14 21:10:04 +08:00
#import <Masonry/Masonry.h>
#import <MarqueeLabel.h>
#import <YYText/YYLabel.h>
2021-11-23 19:27:18 +08:00
#import "TTPopup.h"
2021-10-14 21:10:04 +08:00
///Tool
#import "UIImage+Utils.h"
#import "UIButton+EnlargeTouchArea.h"
#import "XPMacro.h"
2021-10-27 23:13:34 +08:00
#import "ThemeColor+Room.h"
#import "TTPopup.h"
2021-11-23 19:27:18 +08:00
#import "XCHUDTool.h"
#import "XPHtmlUrl.h"
2021-11-23 19:27:18 +08:00
#import "ApiHost.h"
#import "AccountInfoStorage.h"
2021-11-24 14:31:24 +08:00
#import "HttpRequestHelper.h"
///Model
#import "RoomInfoModel.h"
2021-11-23 19:27:18 +08:00
#import "UserInfoModel.h"
#import "AttachMentModel.h"
///View
#import "XPShareView.h"
///VC
#import "XPWebViewcontroller.h"
2021-10-14 21:10:04 +08:00
2021-11-23 19:27:18 +08:00
@interface RoomHeaderView ()<XCShareViewDelegate>
2021-10-14 21:10:04 +08:00
///
@property (nonatomic,strong) UIButton *backButton;
///
@property (nonatomic,strong) UIStackView *nickStackView;
///
@property (nonatomic,strong) UIStackView *titleStackView;
///
@property (nonatomic,strong) MarqueeLabel *titleLabel;
///
@property (nonatomic,strong) UIImageView *giftEffectImageView;
///
@property (nonatomic,strong) UIImageView *lockRoomImageView;
2021-10-14 21:10:04 +08:00
///
@property (nonatomic,strong) UIStackView *onlineStackView;
///绿
@property (nonatomic,strong) UIView * greenDotView;
2021-12-17 19:31:26 +08:00
///id线
2021-10-14 21:10:04 +08:00
@property (nonatomic,strong) YYLabel *idLabel;
///
@property (nonatomic,strong) UIButton *collectButton;
///
@property (nonatomic,strong) UIButton *shareButton;
///
@property (nonatomic,strong) UIButton *settingButton;
@property (nonatomic, weak) id<RoomHostDelegate> hostDelegate;
2021-10-14 21:10:04 +08:00
@end
@implementation RoomHeaderView
2021-10-14 21:10:04 +08:00
- (instancetype)initWithDelegate:(id<RoomHostDelegate>)delegate {
self = [super init];
2021-10-14 21:10:04 +08:00
if (self) {
_hostDelegate = delegate;
2021-10-14 21:10:04 +08:00
[self initSubViews];
[self initSubViewConstraints];
}
return self;
}
2021-11-23 19:27:18 +08:00
#pragma mark - Event Response
2021-10-14 21:10:04 +08:00
- (void)backButtonAction:(UIButton *)sender {
2021-12-03 17:07:21 +08:00
[self.hostDelegate miniRoom];
2021-10-14 21:10:04 +08:00
}
- (void)shareButtonAction:(UIButton *)sender{
2021-11-23 19:27:18 +08:00
[self showSharePanel];
2021-10-14 21:10:04 +08:00
}
- (void)settingButtonAction:(UIButton *)sender {
TTActionSheetConfig *exitRoom = [TTActionSheetConfig normalTitle:@"退出房间" clickAction:^{
[self.hostDelegate exitRoom];
}];
TTActionSheetConfig *reportRoom = [TTActionSheetConfig normalTitle:@"举报房间" clickAction:^{
XPWebViewController * webVC = [[XPWebViewController alloc] init];
NSString *urlstr = [NSString stringWithFormat:@"%@?reportUid=%ld&source=ROOM", URLWithType(kReportRoomURL),self.hostDelegate.getRoomInfo.uid];
webVC.url = urlstr;
[[self.hostDelegate getCurrentNav] pushViewController:webVC animated:YES];
}];
[TTPopup actionSheetWithItems:@[exitRoom, reportRoom]];
2021-10-14 21:10:04 +08:00
}
#pragma mark - Private Method
- (void)initSubViews {
[self addSubview:self.backButton];
[self addSubview:self.nickStackView];
[self addSubview:self.collectButton];
[self addSubview:self.shareButton];
[self addSubview:self.settingButton];
[self.nickStackView addArrangedSubview:self.titleStackView];
[self.nickStackView addArrangedSubview:self.onlineStackView];
[self.onlineStackView addArrangedSubview:self.greenDotView];
[self.onlineStackView addArrangedSubview:self.idLabel];
[self.titleStackView addArrangedSubview:self.titleLabel];
[self.titleStackView addArrangedSubview:self.giftEffectImageView];
[self.titleStackView addArrangedSubview:self.lockRoomImageView];
2021-10-14 21:10:04 +08:00
}
- (void)initSubViewConstraints {
[self.backButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self).offset(14);
make.bottom.equalTo(self).offset(-14);
make.height.width.equalTo(@22);
}];
//
[self.settingButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.right.mas_equalTo(-14);
make.centerY.mas_equalTo(self.backButton);
make.width.height.mas_equalTo(20);
}];
[self.shareButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.right.equalTo(self.settingButton.mas_left).offset(-17);
make.centerY.mas_equalTo(self.backButton);
make.width.height.mas_equalTo(20);
}];
[self.collectButton mas_remakeConstraints:^(MASConstraintMaker *make) {
make.centerY.equalTo(self.backButton);
make.left.equalTo(self.nickStackView.mas_right).offset(5);
make.width.mas_equalTo(@53);
make.height.mas_equalTo(@22);
}];
[self.nickStackView mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.mas_equalTo(self.backButton);
make.left.mas_equalTo(self.backButton.mas_right).offset(10);
}];
[self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.mas_lessThanOrEqualTo(100);
}];
[self.greenDotView mas_makeConstraints:^(MASConstraintMaker *make) {
make.size.mas_equalTo(CGSizeMake(3,3));
}];
}
- (void)onRoomUpdate {
RoomInfoModel* roomInfo = self.hostDelegate.getRoomInfo;
if (roomInfo) {
self.titleLabel.text = roomInfo.title;
2021-12-17 19:31:26 +08:00
self.idLabel.text = [NSString stringWithFormat:@"大鹅号:%ld %ld人在线", (long)roomInfo.erbanNo, (long)(roomInfo.onlineNum > 0 ? roomInfo.onlineNum : 0)];
self.giftEffectImageView.hidden = !roomInfo.hasAnimationEffect;
}
}
2021-11-23 19:27:18 +08:00
- (void)showSharePanel {
XPShareItem *cycle = [XPShareItem itemWitTag:XPShareItemTagMoments title:@"朋友圈" imageName:@"share_wechat_circle_normal" disableImageName:@"share_wechat_circle_disable"];
XPShareItem *wechat = [XPShareItem itemWitTag:XPShareItemTagWeChat title:@"微信好友" imageName:@"share_wechat_normal" disableImageName:@"share_wechat_disable"];
XPShareItem *qq = [XPShareItem itemWitTag:XPShareItemTagQQ title:@"QQ好友" imageName:@"share_qq_normal" disableImageName:@"share_qq_disable"];
XPShareItem *qqzone = [XPShareItem itemWitTag:XPShareItemTagQQZone title:@"QQ空间" imageName:@"share_qqzone_normal" disableImageName:@"share_qqzone_disable"];
NSArray * items = @[wechat,cycle, qq, qqzone];
RoomInfoModel * roomInfo = [self.hostDelegate getRoomInfo];
XPShareInfoModel * shareInfo = [[XPShareInfoModel alloc] init];
2022-02-16 10:51:11 +08:00
shareInfo.shareTitle = @"来大鹅,开黑交友玩游戏";
shareInfo.shareContent = @"人美声甜带上分,一起来玩吧~";
2021-11-23 19:27:18 +08:00
shareInfo.shareImageUrl = [self.hostDelegate getRoomInfo].avatar;
2021-11-24 14:31:24 +08:00
shareInfo.type = ShareType_Room;
shareInfo.roomUid = roomInfo.uid;
2021-11-23 19:27:18 +08:00
NSString * uid = [AccountInfoStorage instance].getUid;
NSString * urlString = [NSString stringWithFormat:@"%@/%@?shareUid=%@&uid=%ld&room_name=%@&room_id=%ld&room_avatar=%@&share_name=%@",API_HOST_URL,URLWithType(kShareRoomURL),uid,roomInfo.uid,roomInfo.title,roomInfo.erbanNo,roomInfo.avatar,roomInfo.nick];
shareInfo.shareUrl = urlString;
CGFloat margin = 15;
CGSize itemSize = CGSizeMake((KScreenWidth-2*margin)/4, 65);
XPShareView *shareView = [[XPShareView alloc] initWithItems:items itemSize:itemSize shareInfo:shareInfo];
shareView.delegate = self;
[TTPopup popupView:shareView style:TTPopupStyleActionSheet];
}
2021-11-24 14:31:24 +08:00
///
- (void)saveShare:(XPShareInfoModel *)shareInfo {
NSMutableDictionary *params = [NSMutableDictionary dictionary];
NSString *uid = [AccountInfoStorage instance].getUid;
NSString *ticket = [AccountInfoStorage instance].getTicket;
[params setObject:uid forKey:@"uid"];
[params setObject:@(shareInfo.shareType) forKey:@"shareType"];
[params setObject:ticket forKey:@"ticket"];
[params setObject:@(shareInfo.type) forKey:@"sharePageId"];
if (shareInfo.shareUrl.length > 0) {
[params setObject:shareInfo.shareUrl forKey:@"shareUrl"];
}
if (shareInfo.roomUid > 0) {
[params setObject:@(shareInfo.roomUid) forKey:@"targetUid"];
}
[HttpRequestHelper POST:@"usershare/save" params:params success:^(BaseModel * _Nonnull data) {
} failure:^(NSInteger resCode, NSString * _Nonnull message) {
}];
}
2021-11-23 19:27:18 +08:00
#pragma mark - XCShareViewDelegate
- (void)shareView:(XPShareView *)shareView shareFail:(NSString *)message {
[TTPopup dismiss];
[XCHUDTool showErrorWithMessage:message];
}
2021-11-24 14:31:24 +08:00
- (void)shareView:(XPShareView *)shareView didSuccess:(XPShareInfoModel *)shareInfo{
2021-11-23 19:27:18 +08:00
[TTPopup dismiss];
[XCHUDTool showErrorWithMessage:@"分享成功"];
AttachmentModel * attachMent = [[AttachmentModel alloc] init];
attachMent.first = CustomMessageType_Room_Tip;
attachMent.second = Custom_Message_Sub_Room_Tip_ShareRoom;
NSMutableDictionary * dic = [NSMutableDictionary dictionary];
NSString * uid = [AccountInfoStorage instance].getUid;
[dic setValue:uid forKey:@"uid"];
NSMutableDictionary * userDic = [NSMutableDictionary dictionary];
UserInfoModel * userInfo = [self.hostDelegate getUserInfo];
RoomInfoModel * roomInfo = [self.hostDelegate getRoomInfo];
[userDic setValue:roomInfo.nick.length > 0 ? roomInfo.nick : @"" forKey:@"targetNick"];
[userDic setValue:@(roomInfo.uid) forKey:@"targetUid"];
[userDic setValue:userInfo.nick.length > 0 ? userInfo.nick : @"" forKey:@"nick"];
[dic setValue:userDic forKey:@"data"];
attachMent.data = dic;
NSString *sessionID = [NSString stringWithFormat:@"%ld", [self.hostDelegate getRoomInfo].roomId];
NIMMessage *message = [[NIMMessage alloc]init];
NIMCustomObject *object = [[NIMCustomObject alloc] init];
object.attachment = attachMent;
message.messageObject = object;
//
NIMSession *session = [NIMSession session:sessionID type:NIMSessionTypeChatroom];
[[NIMSDK sharedSDK].chatManager sendMessage:message toSession:session error:nil];
2021-11-24 14:31:24 +08:00
///
[self saveShare:shareInfo];
2021-11-23 19:27:18 +08:00
}
- (void)shareViewDidClickCancel:(XPShareView *)shareView {
[TTPopup dismiss];
}
#pragma mark - Getters And Setters
2021-10-14 21:10:04 +08:00
- (UIButton *)backButton{
if (!_backButton) {
_backButton = [[UIButton alloc] init];
[_backButton setImage:[UIImage imageNamed:@"room_info_back"] forState:UIControlStateNormal];
[_backButton addTarget:self action:@selector(backButtonAction:) forControlEvents:UIControlEventTouchUpInside];
[_backButton setEnlargeEdgeWithTop:15 right:15 bottom:15 left:15];
}
return _backButton;
}
- (UIButton *)shareButton {
if(!_shareButton){
_shareButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_shareButton setImage:[UIImage imageNamed:@"room_info_share"] forState:UIControlStateNormal];
[_shareButton addTarget:self action:@selector(shareButtonAction:) forControlEvents:UIControlEventTouchUpInside];
[_shareButton setEnlargeEdgeWithTop:8 right:8 bottom:8 left:8];
}
return _shareButton;
}
- (UIButton *)settingButton {
if (!_settingButton) {
_settingButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_settingButton setImage:[UIImage imageNamed:@"room_info_setting"] forState:UIControlStateNormal];
[_settingButton addTarget:self action:@selector(settingButtonAction:) forControlEvents:UIControlEventTouchUpInside];
[_settingButton setEnlargeEdgeWithTop:8 right:8 bottom:8 left:8];
}
return _settingButton;
}
- (UIButton *)collectButton {
if (!_collectButton) {
_collectButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_collectButton setTitle:@"收藏" forState:UIControlStateNormal];
[_collectButton setTitle:@"已收藏" forState:UIControlStateSelected];
[_collectButton setTitleColor:[ThemeColor mainTextColor] forState:UIControlStateNormal];
[_collectButton setTitleColor:[ThemeColor mainTextColor] forState:UIControlStateSelected];
[_collectButton setBackgroundImage:[UIImage gradientColorImageFromColors:@[[ThemeColor confirmButtonGradientStartColor], [ThemeColor confirmButtonGradientEndColor]] gradientType:GradientTypeLeftToRight imgSize:CGSizeMake(53, 22)] forState:UIControlStateNormal];
_collectButton.titleLabel.font = [UIFont systemFontOfSize:12];
_collectButton.layer.cornerRadius = 11;
_collectButton.layer.masksToBounds = YES;
_collectButton.hidden = YES;
2021-10-14 21:10:04 +08:00
}
return _collectButton;
}
- (UIStackView *)nickStackView {
if (!_nickStackView) {
_nickStackView = [[UIStackView alloc] init];
_nickStackView.axis = UILayoutConstraintAxisVertical;
_nickStackView.distribution = UIStackViewDistributionFill;
_nickStackView.alignment = UIStackViewAlignmentLeading;
_nickStackView.spacing = 3;
}
return _nickStackView;
}
- (UIStackView *)titleStackView {
if (!_titleStackView) {
_titleStackView = [[UIStackView alloc] init];
_titleStackView.axis = UILayoutConstraintAxisHorizontal;
_titleStackView.distribution = UIStackViewDistributionFill;
_titleStackView.alignment = UIStackViewAlignmentCenter;
_titleStackView.spacing = 5;
}
return _titleStackView;
}
- (MarqueeLabel *)titleLabel{
if (!_titleLabel) {
_titleLabel = [[MarqueeLabel alloc] init];
_titleLabel.scrollDuration = 8.0;
_titleLabel.fadeLength = 6.0f;
_titleLabel.font = [UIFont fontWithName:@"PingFang-SC-Bold" size:14];
2021-12-17 19:31:26 +08:00
_titleLabel.textColor = [ThemeColor roomOwnerNickColor];
2021-10-14 21:10:04 +08:00
}
return _titleLabel;
}
- (UIImageView *)giftEffectImageView {
if (!_giftEffectImageView) {
_giftEffectImageView = [[UIImageView alloc] init];
_giftEffectImageView.userInteractionEnabled = YES;
_giftEffectImageView.image = [UIImage imageNamed:@"room_info_gift_effect"];
}
return _giftEffectImageView;
}
- (UIImageView *)lockRoomImageView {
if (!_lockRoomImageView) {
_lockRoomImageView = [[UIImageView alloc] init];
_lockRoomImageView.userInteractionEnabled = YES;
_lockRoomImageView.image = [UIImage imageNamed:@"room_info_lock_room"];
_lockRoomImageView.hidden = YES;
}
return _lockRoomImageView;
}
2021-10-14 21:10:04 +08:00
- (UIStackView *)onlineStackView {
if (!_onlineStackView) {
_onlineStackView = [[UIStackView alloc] init];
_onlineStackView.axis = UILayoutConstraintAxisHorizontal;
_onlineStackView.distribution = UIStackViewDistributionFill;
_onlineStackView.alignment = UIStackViewAlignmentCenter;
_onlineStackView.spacing = 2;
}
return _onlineStackView;
}
- (UIView *)greenDotView {
if (!_greenDotView) {
_greenDotView = [[UIView alloc] init];
_greenDotView.backgroundColor = [ThemeColor roomOnLineIdenColor];
_greenDotView.layer.masksToBounds = YES;
_greenDotView.layer.cornerRadius = 1.5;
}
return _greenDotView;
}
- (YYLabel *)idLabel {
if (!_idLabel) {
_idLabel = [[YYLabel alloc] init];
2021-12-17 19:31:26 +08:00
_idLabel.textColor = [UIColor colorWithWhite:1 alpha:0.6];
2021-10-14 21:10:04 +08:00
_idLabel.font = [UIFont systemFontOfSize:9];
}
return _idLabel;
}
@end