Files
yinmeng-ios/xplan-ios/Main/Room/View/Sailing/View/XPSailingViewController.m
2022-08-18 19:58:32 +08:00

468 lines
16 KiB
Objective-C

//
// XPSailingViewController.m
// xplan-ios
//
// Created by 冯硕 on 2022/8/12.
//
#import "XPSailingViewController.h"
///Third
#import <Masonry/Masonry.h>
#import <NIMSDK/NIMSDK.h>
///Tool
#import "ThemeColor.h"
#import "XPMacro.h"
#import "TTPopup.h"
#import "XPHtmlUrl.h"
///Model
#import "RoomSailingInfoModel.h"
#import "RoomSailingPrizeListModel.h"
#import "AttachmentModel.h"
///View
#import "XPSailingRankView.h"
#import "XPRoomHalfWebView.h"
#import "XPSailingPrizeView.h"
///P
#import "XPSailingPresenter.h"
#import "XPSailingProtocol.h"
@interface XPSailingViewController ()<XPSailingProtocol, NIMSystemNotificationManagerDelegate>
///顶部的View
@property (nonatomic,strong) UIView * topView;
///背景图
@property (nonatomic,strong) UIImageView *backImageView;
///排行榜
@property (nonatomic,strong) UIButton *rankButton;
///h获取燃油
@property (nonatomic,strong) UIButton *getFuleButton;
///记录
@property (nonatomic,strong) UIButton *recordButton;
///内容
@property (nonatomic,strong) UIImageView *contentImageView;
///说明
@property (nonatomic,strong) UIButton *descriptionButton;
///燃油
@property (nonatomic,strong) UIButton *fuleButton;
///个数的容器
@property (nonatomic,strong) UIStackView * numberView;
///加
@property (nonatomic,strong) UIButton *addButton;
///减
@property (nonatomic,strong) UIButton *reduButton;
///输入个数
@property (nonatomic,strong) UITextField *textField;
///探索
@property (nonatomic,strong) UIButton *exploreButton;
///消耗燃油
@property (nonatomic,strong) UILabel *consumLabel;
@property (nonatomic,assign) NSInteger exploreCount;
///航海的信息
@property (nonatomic,strong) RoomSailingInfoModel *sailingInfo;
///房主的uid
@property (nonatomic,strong) NSString *roomUid;
///
@property (nonatomic,strong) NSArray<NSString *> *levelArray;
@end
@implementation XPSailingViewController
- (void)dealloc {
[[NIMSDK sharedSDK].systemNotificationManager removeDelegate:self];
}
- (instancetype)initWithRoomUid:(NSString *)roomUid {
if (self = [super init]) {
self.roomUid = roomUid;
[[NIMSDK sharedSDK].systemNotificationManager addDelegate:self];
}
return self;
}
- (__kindof id)createPresenter {
return [[XPSailingPresenter alloc] init];
}
- (void)viewDidLoad {
[super viewDidLoad];
[self.presenter getSailingInfo];
[self initSubViews];
[self initSubViewConstraints];
}
#pragma mark - Private Method
- (void)initSubViews {
self.levelArray = @[@"1", @"10", @"50", @"100"];
self.exploreCount = 0;
self.view.backgroundColor = [UIColor clearColor];
[self.view addSubview:self.topView];
[self.view addSubview:self.backImageView];
[self.backImageView addSubview:self.rankButton];
[self.backImageView addSubview:self.getFuleButton];
[self.backImageView addSubview:self.recordButton];
[self.backImageView addSubview:self.contentImageView];
[self.contentImageView addSubview:self.descriptionButton];
[self.contentImageView addSubview:self.fuleButton];
[self.contentImageView addSubview:self.numberView];
[self.contentImageView addSubview:self.exploreButton];
[self.contentImageView addSubview:self.consumLabel];
[self.numberView addArrangedSubview:self.reduButton];
[self.numberView addArrangedSubview:self.textField];
[self.numberView addArrangedSubview:self.addButton];
}
- (void)initSubViewConstraints {
[self.topView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.top.mas_equalTo(self.view);
make.bottom.mas_equalTo(self.backImageView.mas_top);
}];
[self.backImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.bottom.mas_equalTo(self.view);
make.height.mas_equalTo(515);
}];
[self.rankButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.size.mas_equalTo(CGSizeMake(41, 32));
make.top.mas_equalTo(self.backImageView).offset(129);
make.right.mas_equalTo(self.backImageView).offset(-12);
}];
[self.getFuleButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.size.right.mas_equalTo(self.rankButton);
make.top.mas_equalTo(self.rankButton.mas_bottom).offset(8);
}];
[self.recordButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.size.right.mas_equalTo(self.rankButton);
make.top.mas_equalTo(self.getFuleButton.mas_bottom).offset(8);
}];
CGFloat kscale = 199.0f / 356.0f;
[self.contentImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.mas_equalTo(self.backImageView).inset(9);
make.bottom.mas_equalTo(self.backImageView).offset(-34);
make.height.mas_equalTo((KScreenWidth - 18) * kscale);
}];
[self.descriptionButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.size.mas_equalTo(CGSizeMake(65, 22));
make.right.mas_equalTo(self.contentImageView);
make.top.mas_equalTo(self.contentImageView).offset(42);
}];
[self.fuleButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.size.right.mas_equalTo(self.descriptionButton);
make.top.mas_equalTo(self.descriptionButton.mas_bottom).offset(4);
}];
[self.numberView mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.mas_equalTo(self.contentImageView);
make.top.mas_equalTo(self.contentImageView).offset(77);
make.height.mas_equalTo(30);
}];
[self.reduButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.mas_equalTo(27);
make.height.mas_equalTo(27);
}];
[self.addButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.mas_equalTo(27);
make.height.mas_equalTo(27);
}];
[self.textField mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.mas_equalTo(75);
make.height.mas_equalTo(30);
}];
[self.exploreButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.size.mas_equalTo(CGSizeMake(150, 47));
make.centerX.mas_equalTo(self.contentImageView);
make.top.mas_equalTo(self.numberView.mas_bottom).offset(12);
}];
[self.consumLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.mas_equalTo(self.contentImageView);
make.top.mas_equalTo(self.exploreButton.mas_bottom).offset(1);
}];
}
#pragma mark - XPSailingProtocol
- (void)getSailingInfoSuccess:(RoomSailingInfoModel *)info {
self.sailingInfo = info;
NSString * fuleStr = [NSString stringWithFormat:@"%ld", info.keyNum];
[self.fuleButton setTitle:fuleStr forState:UIControlStateNormal];
}
- (void)openSailingSuccess:(RoomSailingPrizeListModel *)model {
self.sailingInfo.keyNum = model.remainKeyNum;
NSString * fuleStr = [NSString stringWithFormat:@"%ld", self.sailingInfo.keyNum];
[self.fuleButton setTitle:fuleStr forState:UIControlStateNormal];
self.exploreButton.userInteractionEnabled = YES;
if (model.prizeItemList.count > 0) {
CGFloat height = 180;
if (model.prizeItemList.count> 5) {
height = height + 70 + 10;
}
XPSailingPrizeView * prizeView = [[XPSailingPrizeView alloc] initWithFrame:CGRectMake(0, 0, 283, height)];
prizeView.prizeItemList = model.prizeItemList;
[TTPopup popupView:prizeView style:TTPopupStyleAlert];
}
}
- (void)openSailingFail:(NSString *)message {
self.exploreButton.userInteractionEnabled = YES;
}
#pragma mark - Event Response
- (void)dismissView {
[self dismissViewControllerAnimated:YES completion:nil];
}
- (void)rankButtonAction:(UIButton *)sender {
XPSailingRankView * rankView = [[XPSailingRankView alloc] init];
[TTPopup popupView:rankView style:TTPopupStyleActionSheet];
}
- (void)getFuleButtonAction:(UIButton *)sender {
XPRoomHalfWebView * webView = [[XPRoomHalfWebView alloc] init];
webView.url = URLWithType(kSailingActivityURL);
webView.isSailing = YES;
[TTPopup popupView:webView style:TTPopupStyleActionSheet];
}
- (void)recordButtonAction:(UIButton *)sender {
XPRoomHalfWebView * webView = [[XPRoomHalfWebView alloc] init];
webView.url = URLWithType(kSailingRecordURL);
webView.isSailing = YES;
[TTPopup popupView:webView style:TTPopupStyleActionSheet];
}
- (void)descriptionButtonAction:(UIButton *)sender {
XPRoomHalfWebView * webView = [[XPRoomHalfWebView alloc] init];
webView.isSailing = YES;
webView.url = URLWithType(kSailingPlayDescdURL);
[TTPopup popupView:webView style:TTPopupStyleActionSheet];
}
- (void)addButtonAction:(UIButton *)sender {
self.exploreCount ++;
if (self.exploreCount >= self.levelArray.count) {
self.exploreCount = 3;
}
}
- (void)reduButtonAction:(UIButton *)sender {
self.exploreCount --;
if (self.exploreCount <= 0) {
self.exploreCount = 0;
}
}
- (void)exploreButtonAction:(UIButton *)sender {
if (self.exploreCount > self.sailingInfo.keyNum) {
TTAlertConfig * config = [[TTAlertConfig alloc] init];
config.title = @"";
config.message = @"参与活动获得燃料";
config.confirmButtonConfig.title = @"去参与";
config.cancelButtonConfig.title = @"取消";
[TTPopup alertWithConfig:config confirmHandler:^{
[self getFuleButtonAction:self.getFuleButton];
} cancelHandler:^{
}];
} else {
NSString * roomUid = [NSString stringWithFormat:@""];
[self.presenter openSailing:roomUid sendMessage:YES keyNum:self.textField.text.integerValue];
self.exploreButton.userInteractionEnabled = NO;
}
}
#pragma mark - NIMSystemNotificationManagerDelegate
- (void)onReceiveCustomSystemNotification:(NIMCustomSystemNotification *)notification {
if (notification.receiverType == NIMSessionTypeP2P) {
AttachmentModel *attachment = [AttachmentModel modelWithJSON:notification.content];
if (attachment.first == CustomMessageType_Account && attachment.second == Custom_Message_Sub_Account_Changed){
if (attachment.second == Custom_Message_Sub_Account_Changed) {
[self.presenter getSailingInfo];
}
}
}
}
#pragma mark - Getters And Setters
- (void)setExploreCount:(NSInteger)exploreCount {
_exploreCount = exploreCount;
if (_exploreCount == 0) {
self.reduButton.enabled = NO;
} else {
self.reduButton.enabled = YES;
}
if (_exploreCount == 3) {
self.addButton.enabled = NO;
} else {
self.addButton.enabled = YES;
}
self.textField.text = [self.levelArray objectAtIndex:_exploreCount];
}
- (UIView *)topView {
if (!_topView) {
_topView = [[UIView alloc] init];
_topView.backgroundColor = [UIColor clearColor];
UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissView)];
[_topView addGestureRecognizer:tap];
return _topView;
}
return _topView;
}
- (UIImageView *)backImageView {
if (!_backImageView) {
_backImageView = [[UIImageView alloc] init];
_backImageView.userInteractionEnabled = YES;
_backImageView.image = [UIImage imageNamed:@"room_sailing_bg"];
_backImageView.contentMode = UIViewContentModeScaleAspectFill;
_backImageView.layer.masksToBounds = YES;
}
return _backImageView;
}
- (UIButton *)rankButton {
if (!_rankButton) {
_rankButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_rankButton setImage:[UIImage imageNamed:@"room_sailing_rank"] forState:UIControlStateNormal];
[_rankButton setImage:[UIImage imageNamed:@"room_sailing_rank"] forState:UIControlStateSelected];
[_rankButton addTarget:self action:@selector(rankButtonAction:) forControlEvents:UIControlEventTouchUpInside];
}
return _rankButton;
}
- (UIButton *)getFuleButton {
if (!_getFuleButton) {
_getFuleButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_getFuleButton setImage:[UIImage imageNamed:@"room_sailing_getfule"] forState:UIControlStateNormal];
[_getFuleButton setImage:[UIImage imageNamed:@"room_sailing_getfule"] forState:UIControlStateSelected];
[_getFuleButton addTarget:self action:@selector(getFuleButtonAction:) forControlEvents:UIControlEventTouchUpInside];
}
return _getFuleButton;
}
- (UIButton *)recordButton {
if (!_recordButton) {
_recordButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_recordButton setImage:[UIImage imageNamed:@"room_sailing_record"] forState:UIControlStateNormal];
[_recordButton setImage:[UIImage imageNamed:@"room_sailing_record"] forState:UIControlStateSelected];
[_recordButton addTarget:self action:@selector(recordButtonAction:) forControlEvents:UIControlEventTouchUpInside];
}
return _recordButton;
}
- (UIImageView *)contentImageView {
if (!_contentImageView) {
_contentImageView = [[UIImageView alloc] init];
_contentImageView.userInteractionEnabled = YES;
_contentImageView.image = [UIImage imageNamed:@"room_sailing_explore_bg"];
}
return _contentImageView;
}
- (UIButton *)descriptionButton {
if (!_descriptionButton) {
_descriptionButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_descriptionButton setImage:[UIImage imageNamed:@"room_sailing_description"] forState:UIControlStateNormal];
[_descriptionButton setImage:[UIImage imageNamed:@"room_sailing_description"] forState:UIControlStateSelected];
[_descriptionButton addTarget:self action:@selector(descriptionButtonAction:) forControlEvents:UIControlEventTouchUpInside];
}
return _descriptionButton;
}
- (UIButton *)fuleButton {
if (!_fuleButton) {
_fuleButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_fuleButton setTitle:@"0" forState:UIControlStateNormal];
[_fuleButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
_fuleButton.titleLabel.font = [UIFont systemFontOfSize:10];
[_fuleButton setTitleColor:[ThemeColor colorWithHexString:@"#643B29"] forState:UIControlStateNormal];
[_fuleButton setBackgroundImage:[UIImage imageNamed:@"room_sailing_rule_bg"] forState:UIControlStateNormal];
}
return _fuleButton;
}
- (UIStackView *)numberView {
if (!_numberView) {
_numberView = [[UIStackView alloc] init];
_numberView.axis = UILayoutConstraintAxisHorizontal;
_numberView.distribution = UIStackViewDistributionFill;
_numberView.alignment = UIStackViewAlignmentCenter;
_numberView.spacing = 6;
}
return _numberView;
}
- (UITextField *)textField {
if (!_textField) {
_textField = [[UITextField alloc] init];
_textField.textColor = [ThemeColor colorWithHexString:@"#64472E"];
_textField.backgroundColor = [ThemeColor colorWithHexString:@"#DACBB4"];
_textField.font = [UIFont systemFontOfSize:15];
_textField.layer.masksToBounds = YES;
_textField.layer.cornerRadius = 11;
_textField.text = @"1";
_textField.enabled = NO;
_textField.textAlignment = NSTextAlignmentCenter;
}
return _textField;
}
- (UIButton *)addButton {
if (!_addButton) {
_addButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_addButton setImage:[UIImage imageNamed:@"room_sailing_add"] forState:UIControlStateNormal];
[_addButton setImage:[UIImage imageNamed:@"room_sailing_add"] forState:UIControlStateSelected];
[_addButton addTarget:self action:@selector(addButtonAction:) forControlEvents:UIControlEventTouchUpInside];
}
return _addButton;
}
- (UIButton *)reduButton {
if (!_reduButton) {
_reduButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_reduButton setImage:[UIImage imageNamed:@"room_sailing_redu"] forState:UIControlStateNormal];
[_reduButton setImage:[UIImage imageNamed:@"room_sailing_redu"] forState:UIControlStateSelected];
[_reduButton addTarget:self action:@selector(reduButtonAction:) forControlEvents:UIControlEventTouchUpInside];
}
return _reduButton;
}
- (UIButton *)exploreButton {
if (!_exploreButton) {
_exploreButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_exploreButton setImage:[UIImage imageNamed:@"room_sailing_explore"] forState:UIControlStateNormal];
[_exploreButton setImage:[UIImage imageNamed:@"room_sailing_explore"] forState:UIControlStateSelected];
[_exploreButton addTarget:self action:@selector(exploreButtonAction:) forControlEvents:UIControlEventTouchUpInside];
}
return _exploreButton;
}
- (UILabel *)consumLabel {
if (!_consumLabel) {
_consumLabel = [[UILabel alloc] init];
_consumLabel.font = [UIFont systemFontOfSize:10];
_consumLabel.textColor = [ThemeColor colorWithHexString:@"#A08161"];
_consumLabel.textAlignment = NSTextAlignmentCenter;
_consumLabel.text = @"消耗1燃油连续探索";
}
return _consumLabel;
}
@end