Files
peko-ios/YuMi/Modules/YMNewHome/View/CreateEventViewControllerV2.m

827 lines
36 KiB
Objective-C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// CreateEventViewControllerV2.m
// YuMi
//
// Created by P on 2025/5/9.
//
#import "CreateEventViewControllerV2.h"
#import <Masonry/Masonry.h>
#import <PhotosUI/PhotosUI.h>
#import <TZImagePickerController/TZImagePickerController.h>
#import "UploadFile.h"
#import "CreateEventPresenter.h"
#import "CreateEventPickerContainerView.h"
#import "CreateEventSelectRoomViewController.h"
#import "UIImage+Utils.h"
#import "XPIAPRechargeViewController.h"
#define MAX_EVENT_TITLE_LENGTH 50
#define MAX_EVENT_CONTENT_LENGTH 1000
@interface CreateEventViewControllerV2 () <UITextViewDelegate, UITextFieldDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate, PHPickerViewControllerDelegate, UIScrollViewDelegate, CreateEventPresenterProcotol, TZImagePickerControllerDelegate>
@property (nonatomic, strong) EventConfigModel *configModel;
@property (nonatomic, strong) EventRoomModel *selectRoomModel;
@property (nonatomic, strong) WalletInfoModel *walletInfoModel;
@property (nonatomic, strong) UIImage *selectedImage;
//@property (nonatomic, strong) UIView *durationPickerContainerView;
//@property (nonatomic, strong) CreateEventPickerContainerView *durationPickerView;
@property (nonatomic, strong) UILabel *durationPickerTitleLabel;
@property (nonatomic, strong) UIButton *durationPickerOkButton;
@property (nonatomic, assign) NSInteger selectedHour;
@property (nonatomic, assign) NSInteger selectedMin;
@property (nonatomic, assign) NSInteger durationMinutes;
// 添加私有方法声明
- (UIButton *)createUploadBannerButtonWithTitle:(NSString *)title imageName:(NSString *)imageName selectedImageName:(NSString *)selectedImageName tag:(NSInteger)tag;
@end
@implementation CreateEventViewControllerV2
static const CGFloat kHorizontalPadding = 16.0;
static const CGFloat kVerticalPadding = 10.0;
static const CGFloat kSectionSpacing = 20.0;
- (CreateEventPresenter *)createPresenter {
return [CreateEventPresenter new];
}
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
self.title = YMLocalizedString(@"20.20.59_text_8");
[self setupUI];
[self updateEventTitleCharCount];
[self updateEventContentCharCount];
// 键盘通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
// 点击空白收起键盘
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
tap.cancelsTouchesInView = NO;
[self.view addGestureRecognizer:tap];
// 设置 scrollView delegate
self.scrollView.delegate = self;
[self.presenter loadConfig];
}
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
- (void)keyboardWillShow:(NSNotification *)notification {
NSDictionary *userInfo = notification.userInfo;
CGRect keyboardFrame = [userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
CGFloat keyboardHeight = keyboardFrame.size.height;
UIEdgeInsets insets = self.scrollView.contentInset;
insets.bottom = keyboardHeight + 20;
self.scrollView.contentInset = insets;
self.scrollView.scrollIndicatorInsets = insets;
}
- (void)keyboardWillHide:(NSNotification *)notification {
UIEdgeInsets insets = self.scrollView.contentInset;
insets.bottom = 0;
self.scrollView.contentInset = insets;
self.scrollView.scrollIndicatorInsets = insets;
}
- (void)dismissKeyboard {
[self.view endEditing:YES];
}
- (void)backButtonTapped {
[self.navigationController popViewControllerAnimated:YES];
}
- (void)setupUI {
// ScrollView and ContentView
self.scrollView = [[UIScrollView alloc] init];
[self.view addSubview:self.scrollView];
self.contentView = [[UIView alloc] init];
[self.scrollView addSubview:self.contentView];
UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
UIVisualEffectView *visualView = [[UIVisualEffectView alloc]initWithEffect:blurEffect];
[self.view addSubview:visualView];
// Create Event Button (fixed at bottom)
self.createEventButton = [UIButton buttonWithType:UIButtonTypeSystem];
[self.createEventButton setTitle:YMLocalizedString(@"20.20.59_text_8") forState:UIControlStateNormal];
[self.createEventButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[self.createEventButton.titleLabel setFont:kFontSemibold(16)];
[self.createEventButton addGradientBackgroundWithColors:@[
UIColorFromRGB(0xe29030),
UIColorFromRGB(0xfcc074),
] startPoint:CGPointMake(0, 0.5) endPoint:CGPointMake(1, 0.5) cornerRadius:23];
[self.createEventButton setCornerRadius:23];
self.createEventButton.userInteractionEnabled = NO;
self.createEventButton.alpha = 0.3;
[self.createEventButton addTarget:self action:@selector(createEventButtonTapped) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:self.createEventButton];
[self.createEventButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.equalTo(self.view).offset(20);
make.trailing.equalTo(self.view).offset(-20);
make.bottom.equalTo(self.view.mas_safeAreaLayoutGuideBottom).offset(-20);
make.height.mas_equalTo(46);
}];
[visualView mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.trailing.bottom.equalTo(self.view);
make.top.mas_equalTo(self.createEventButton.mas_top).offset(-20);
}];
[self.scrollView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.view.mas_safeAreaLayoutGuideTop);
make.bottom.leading.trailing.equalTo(self.view);
}];
[self.contentView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self.scrollView);
make.width.equalTo(self.scrollView);
}];
[self setupEventTitleSection];
[self setupEventBannerSection];
[self setupUploadBannerSection];
[self setupSelectRoomSection];
[self setupStartTimeSection];
[self setupDurationSection];
[self setupEventContentSection];
[self setupNotifyMyFansSection];
}
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
}
#pragma mark - CreateEventPresenterProcotol
- (void)loadCongfigSuccess:(EventConfigModel *)model {
_configModel = model;
NSString *moneyString = @(model.goldNum).stringValue;
NSTextAttachment *icon = [[NSTextAttachment alloc] init];
icon.bounds = CGRectMake(0, -8, 24, 24);
icon.image = kImage(@"moli_money_icon");
NSDictionary *par = @{
NSFontAttributeName: self.uploadBannerLabel.font,
NSForegroundColorAttributeName: self.uploadBannerLabel.textColor
};
NSAttributedString *firstPart = [[NSAttributedString alloc] initWithString:[NSString stringWithFormat:YMLocalizedString(@"20.20.59_text_11"),
@(model.goldNum)]
attributes:par];
NSAttributedString *iconString = [NSAttributedString attributedStringWithAttachment:icon];
NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithAttributedString:firstPart];
NSRange r = [string.string rangeOfString:moneyString];
[string insertAttributedString:iconString atIndex:r.location];
self.uploadBannerLabel.attributedText = string.copy;
}
- (void)loadCongfigFailure:(NSString *)msg {
[self.navigationController popViewControllerAnimated:YES];
}
- (void)createEventSuccess {
[XNDJTDDLoadingTool showSuccessWithMessage:YMLocalizedString(@"20.20.59_text_34")];
[self.navigationController popViewControllerAnimated:YES];
if (self.createSuccess) {
self.createSuccess();
}
}
- (void)createEventFailure:(NSString *)msg {
[XNDJTDDLoadingTool hideHUD];
}
#pragma mark - Helper Methods
- (UIButton *)createUploadBannerButtonWithTitle:(NSString *)title imageName:(NSString *)imageName selectedImageName:(NSString *)selectedImageName tag:(NSInteger)tag {
UIButton *b = [UIButton buttonWithType:UIButtonTypeCustom];
[b setImage:kImage(imageName) forState:UIControlStateNormal];
[b setImage:kImage(selectedImageName) forState:UIControlStateSelected];
[b setTitle:title forState:UIControlStateNormal];
[b setTitleColor:UIColorFromRGB(0x313131) forState:UIControlStateNormal];
[b.titleLabel setFont:kFontMedium(14)];
[b setTitleEdgeInsets:UIEdgeInsetsMake(0, 8, 0, 0)];
b.tag = tag;
return b;
}
- (UILabel *)createLabelWithText:(NSString *)text {
UILabel *label = [[UILabel alloc] init];
label.text = text;
label.font = kFontMedium(14);
label.textColor = UIColorFromRGB(0x313131);
return label;
}
- (UITextField *)createTextFieldWithPlaceholder:(NSString *)placeholder {
UITextField *textField = [[UITextField alloc] init];
textField.placeholder = placeholder;
textField.font = kFontRegular(14);
textField.textColor = UIColorFromRGB(0x313131);
textField.borderStyle = UITextBorderStyleNone;
[textField setCornerRadius:8];
textField.backgroundColor = UIColorFromRGB(0xf2f3f7);
// 设置左侧内间距为16
UIView *leftPaddingView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 16, textField.frame.size.height)];
textField.leftView = leftPaddingView;
textField.leftViewMode = UITextFieldViewModeAlways;
// 设置右侧内间距为16
UIView *rightPaddingView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 16, textField.frame.size.height)];
textField.rightView = rightPaddingView;
textField.rightViewMode = UITextFieldViewModeAlways;
return textField;
}
- (UILabel *)createCharCountLabel {
UILabel *label = [[UILabel alloc] init];
label.font = kFontRegular(12);
label.textColor = UIColorFromRGB(0x7b7b7d);
return label;
}
- (UIView *)createSelectionViewWithPlaceholder:(NSString *)placeholder target:(id)target action:(SEL)action {
UIView *view = [[UIView alloc] init];
view.backgroundColor = UIColorFromRGB(0xf2f3f7);
view.layer.cornerRadius = 8;
UILabel *label = [[UILabel alloc] init];
label.text = placeholder;
label.font = kFontRegular(14);
label.textColor = UIColorFromRGB(0x7b7b7d);
[view addSubview:label];
UIImageView *arrowImageView = [[UIImageView alloc] initWithImage:[kImage(@"event_arrow") ms_SetImageForRTL]];
[view addSubview:arrowImageView];
[label mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.equalTo(view).offset(10);
make.centerY.equalTo(view);
}];
[arrowImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.trailing.equalTo(view).offset(-10);
make.centerY.equalTo(view);
make.width.height.mas_equalTo(22);
}];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:target action:action];
[view addGestureRecognizer:tap];
view.userInteractionEnabled = YES;
if ([placeholder isEqualToString:YMLocalizedString(@"XPAnchorPKTableViewCell2")]) { // Store placeholder label for later update
if (action == @selector(selectRoomTapped)) self.selectRoomPlaceholderLabel = label;
else if (action == @selector(selectStartTimeTapped)) self.startTimePlaceholderLabel = label;
else if (action == @selector(selectDurationTapped)) self.durationPlaceholderLabel = label;
}
return view;
}
- (void)updateEventTitleCharCount {
NSInteger currentLength = self.eventTitleTextField.text.length;
self.eventTitleCharCountLabel.text = [NSString stringWithFormat:@"%ld/%d", (long)currentLength, MAX_EVENT_TITLE_LENGTH];
}
- (void)updateEventContentCharCount {
NSInteger currentLength = self.eventContentTextView.text.length;
self.eventContentCharCountLabel.text = [NSString stringWithFormat:@"%ld/%d", (long)currentLength, MAX_EVENT_CONTENT_LENGTH];
}
#pragma mark - Actions
- (void)eventBannerTapped {
NSLog(@"Event Banner Tapped");
if (@available(iOS 14, *)) {
// 使用TZImagePickerController来选择并裁剪图片
TZImagePickerController *imagePickerVc = [[TZImagePickerController alloc] initWithMaxImagesCount:1 delegate:self];
imagePickerVc.allowCrop = YES;
imagePickerVc.maxImagesCount = 1;
// 允许拍照
imagePickerVc.allowTakePicture = NO;
imagePickerVc.allowPickingVideo = NO; // 不允许选择视频
imagePickerVc.showSelectedIndex = YES;
// 调整裁剪比例为 690:236
CGFloat aspectRatio = 690.0 / 236.0; // 约为2.92:1
// 计算裁剪框宽度,限制在屏幕宽度内
CGFloat cropWidth = MIN(self.view.frame.size.width - (kHorizontalPadding * 2 - 2), KScreenWidth);
CGFloat cropHeight = cropWidth / aspectRatio;
// 设置裁剪框的尺寸
imagePickerVc.cropRect = CGRectMake((KScreenWidth-cropWidth)/2, (KScreenHeight - cropHeight) / 2, cropWidth, cropHeight);
// 拍照裁剪设置
// imagePickerVc.needCircleCrop = NO; // 不需要圆形裁剪
// imagePickerVc.circleCropRadius = 0; // 圆形裁剪半径,不需要设置
[self presentViewController:imagePickerVc animated:YES completion:nil];
} else {
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
[self presentViewController:picker animated:YES completion:nil];
}
}
- (void)selectRoomTapped {
NSLog(@"Select Room Tapped");
CreateEventSelectRoomViewController *vc = [[CreateEventSelectRoomViewController alloc] init];
[self.navigationController pushViewController:vc animated:YES];
@kWeakify(self);
[vc setDidSelectedRoom:^(EventRoomModel * _Nonnull roomModel) {
@kStrongify(self);
self.selectRoomModel = roomModel;
self.selectRoomPlaceholderLabel.text = @(roomModel.erbanNo).stringValue;
self.selectRoomPlaceholderLabel.textColor = [UIColor blackColor];
[self checkCreateEventButtonState];
}];
}
- (void)selectStartTimeTapped {
CreateEventPickerContainerView *view = [CreateEventPickerContainerView new];
__weak typeof(self) weakSelf = self;
[view showInView:self.view
initialDate:[NSDate date]
config:self.configModel
pickerType:CreateEventPickerTypeStartTime
onConfirm:^(NSDate *date,
NSString *resultString,
NSInteger dutationMinutes) {
weakSelf.startTimePlaceholderLabel.text = resultString;
[weakSelf checkCreateEventButtonState];
}];
}
- (void)selectDurationTapped {
CreateEventPickerContainerView *view = [CreateEventPickerContainerView new];
__weak typeof(self) weakSelf = self;
[view showInView:self.view
initialDate:[NSDate date]
config:self.configModel
pickerType:CreateEventPickerTypeDuration
onConfirm:^(NSDate *date,
NSString *resultString,
NSInteger dutationMinutes) {
weakSelf.durationPlaceholderLabel.text = resultString;
weakSelf.durationMinutes = dutationMinutes;
[weakSelf checkCreateEventButtonState];
}];
}
- (void)createEventButtonTapped {
// Gather all data and proceed with event creation logic
NSString *title = self.eventTitleTextField.text;
UIImage *bannerImage = self.eventBannerImageView.image;
BOOL uploadToHomepage = self.uploadBannerYesButton.selected;
NSString *startTime = self.startTimePlaceholderLabel.text; // This is a placeholder, get actual NSDate
NSString *content = self.eventContentTextView.text;
BOOL notifyFans = self.notifyFansSwitch.isOn;
if (uploadToHomepage) {
TTAlertConfig *config = [[TTAlertConfig alloc]init];
config.title = YMLocalizedString(@"XPAnchorAudienceUpMicView2");
config.message = [NSString stringWithFormat:YMLocalizedString(@"20.20.59_text_33"),
@(self.configModel.goldNum)];
config.actionStyle = TTAlertActionBothStyle;
@kWeakify(self);
[TTPopup alertWithConfig:config showBorder:NO confirmHandler:^{
@kStrongify(self);
@kWeakify(self);
[self uploadCover:bannerImage
finish:^(NSString *path) {
@kStrongify(self);
[self.presenter createEventWithTitle:title
image:path
uploadToHome:uploadToHomepage
startTime:startTime
duration:self.durationMinutes
content:content
gold:uploadToHomepage ? self.configModel.goldNum : 0
roomUid:self.selectRoomModel.roomUid
notifyFans:notifyFans];
}];
} cancelHandler:^{ }];
} else {
@kWeakify(self);
[self uploadCover:bannerImage
finish:^(NSString *path) {
@kStrongify(self);
[self.presenter createEventWithTitle:title
image:path
uploadToHome:uploadToHomepage
startTime:startTime
duration:self.durationMinutes
content:content
gold:uploadToHomepage ? self.configModel.goldNum : 0
roomUid:self.selectRoomModel.roomUid
notifyFans:notifyFans];
}];
}
}
- (void)uploadCover:(UIImage *)cover finish:(void(^)(NSString *path))finish {
[XNDJTDDLoadingTool showLoading];
NSData *data = UIImageJPEGRepresentation(cover, 0.7);
NSString *format = [UIImage getImageTypeWithImageData:data];
NSString *name = [NSString stringWithFormat:@"banner/%@.%@",[NSString createUUID],format];
[[UploadFile share]QCloudUploadImage:data named:name success:^(NSString * _Nonnull key, NSDictionary * _Nonnull resp) {
[XNDJTDDLoadingTool hideHUD];
if (finish) {
finish(key);
}
} failure:^(NSNumber * _Nonnull resCode, NSString * _Nonnull message) {
[XNDJTDDLoadingTool showErrorWithMessage:message];
}];
}
#pragma mark - UITextFieldDelegate
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
if (textField == self.eventTitleTextField) {
NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
if (newString.length > MAX_EVENT_TITLE_LENGTH) {
return NO;
}
}
return YES;
}
- (void)textFieldDidChangeSelection:(UITextField *)textField {
if (textField == self.eventTitleTextField) {
[self updateEventTitleCharCount];
[self checkCreateEventButtonState];
}
}
#pragma mark - UITextViewDelegate
- (void)textViewDidChange:(UITextView *)textView {
if (textView == self.eventContentTextView) {
[self updateEventContentCharCount];
[self checkCreateEventButtonState];
// Optional: Add placeholder behavior for UITextView if needed
}
}
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
if (textView == self.eventContentTextView) {
NSString *newText = [textView.text stringByReplacingCharactersInRange:range withString:text];
if (newText.length > MAX_EVENT_CONTENT_LENGTH) {
return NO;
}
}
return YES;
}
- (void)uploadBannerButtonTapped:(UIButton *)sender {
if (sender == self.uploadBannerYesButton) {
if (!self.uploadBannerYesButton.selected) {
self.uploadBannerYesButton.selected = YES;
self.uploadBannerNoButton.selected = NO;
}
} else if (sender == self.uploadBannerNoButton) {
if (!self.uploadBannerNoButton.selected) { // 避免重复设置
self.uploadBannerYesButton.selected = NO;
self.uploadBannerNoButton.selected = YES;
}
}
[self checkCreateEventButtonState];
}
- (void)checkWalletToUploadBanner {
if (self.walletInfoModel.diamonds.integerValue >= self.configModel.goldNum) {
self.uploadBannerYesButton.selected = YES;
self.uploadBannerNoButton.selected = NO;
} else {
TTAlertConfig *config = [[TTAlertConfig alloc]init];
config.title = YMLocalizedString(@"UserDetail_CP_Toast_0");
config.message = YMLocalizedString(@"XPNobleCenterViewController3");
config.actionStyle = TTAlertActionBothStyle;
@kWeakify(self);
[TTPopup alertWithConfig:config showBorder:NO confirmHandler:^{
@kStrongify(self);
XPIAPRechargeViewController * webVC =[[XPIAPRechargeViewController alloc] init];
webVC.type = @"4";
[self.navigationController pushViewController:webVC animated:YES];
} cancelHandler:^{ }];
}
}
#pragma mark - UIImagePickerControllerDelegate (Legacy)
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<UIImagePickerControllerInfoKey,id> *)info {
UIImage *selectedImage = info[UIImagePickerControllerOriginalImage];
if (selectedImage) {
// 对于iOS 14以下版本选择图片后手动裁剪
CGFloat aspectRatio = 690.0 / 236.0; // 约为2.92:1
CGFloat viewWidth = self.view.frame.size.width - (kHorizontalPadding * 2 - 2);
CGFloat viewHeight = viewWidth / aspectRatio;
CGSize cropSize = CGSizeMake(viewWidth, viewHeight);
UIImage *croppedImage = [selectedImage cutImage:cropSize];
self.selectedImage = croppedImage;
self.eventBannerImageView.image = croppedImage;
self.eventBannerCamearImageView.hidden = NO;
}
[picker dismissViewControllerAnimated:YES completion:nil];
[self checkCreateEventButtonState];
}
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
[picker dismissViewControllerAnimated:YES completion:nil];
}
#pragma mark - PHPickerViewControllerDelegate (iOS 14+)
- (void)picker:(PHPickerViewController *)picker didFinishPicking:(NSArray<PHPickerResult *> *)results API_AVAILABLE(ios(14)) {
[picker dismissViewControllerAnimated:YES completion:nil];
// 我们使用TZImagePickerController代替了PHPickerViewController这个方法不再需要
[self checkCreateEventButtonState];
}
#pragma mark - Event Title Section
- (void)setupEventTitleSection {
self.eventTitleLabel = [self createLabelWithText:YMLocalizedString(@"20.20.59_text_9")];
[self.contentView addSubview:self.eventTitleLabel];
self.eventTitleTextField = [self createTextFieldWithPlaceholder:@""];
self.eventTitleTextField.delegate = self;
[self.contentView addSubview:self.eventTitleTextField];
self.eventTitleCharCountLabel = [self createCharCountLabel];
[self.contentView addSubview:self.eventTitleCharCountLabel];
[self.eventTitleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.contentView.mas_top).offset(kSectionSpacing);
make.leading.equalTo(self.contentView).offset(kHorizontalPadding);
}];
[self.eventTitleTextField mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.eventTitleLabel.mas_bottom).offset(kVerticalPadding);
make.leading.trailing.equalTo(self.contentView).inset(kHorizontalPadding);
make.height.mas_equalTo(40);
}];
[self.eventTitleCharCountLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY
.equalTo(self.eventTitleLabel);
make.trailing.equalTo(self.eventTitleTextField);
}];
}
#pragma mark - Event Banner Section
- (void)setupEventBannerSection {
self.eventBannerLabel = [self createLabelWithText:YMLocalizedString(@"20.20.59_text_10")];
[self.contentView addSubview:self.eventBannerLabel];
self.eventBannerImageView = [[UIImageView alloc] initWithImage:kImage(@"event_take_photo")];
self.eventBannerImageView.contentMode = UIViewContentModeScaleAspectFill;
self.eventBannerImageView.clipsToBounds = YES;
self.eventBannerImageView.layer.cornerRadius = 8;
self.eventBannerImageView.userInteractionEnabled = YES;
UITapGestureRecognizer *bannerTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(eventBannerTapped)];
[self.eventBannerImageView addGestureRecognizer:bannerTap];
[self.contentView addSubview:self.eventBannerImageView];
self.eventBannerCamearImageView = [[UIImageView alloc] initWithImage:kImage(@"event_camear")];
self.eventBannerCamearImageView.hidden = YES;
[self.eventBannerImageView addSubview:self.eventBannerCamearImageView];
[self.eventBannerLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.eventTitleTextField.mas_bottom).offset(kSectionSpacing);
make.leading.equalTo(self.contentView).offset(kHorizontalPadding);
}];
[self.eventBannerImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.eventBannerLabel.mas_bottom).offset(kVerticalPadding);
make.leading.trailing.equalTo(self.contentView).inset(kHorizontalPadding-1);
// 设置高度为宽度除以690:236的比例
make.height.equalTo(self.eventBannerImageView.mas_width).multipliedBy(236.0/690.0);
}];
[self.eventBannerCamearImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.bottom.trailing.equalTo(self.eventBannerImageView);
make.width.height.mas_equalTo(32);
}];
}
#pragma mark - Upload Banner Section
- (void)setupUploadBannerSection {
self.uploadBannerLabel = [self createLabelWithText:YMLocalizedString(@"20.20.59_text_11")];
[self.contentView addSubview:self.uploadBannerLabel];
self.uploadBannerYesButton = [self createUploadBannerButtonWithTitle:YMLocalizedString(@"20.20.59_text_12") imageName:@"event_non_select" selectedImageName:@"event_selected" tag:0];
self.uploadBannerYesButton.selected = NO;
[self.uploadBannerYesButton addTarget:self action:@selector(uploadBannerButtonTapped:) forControlEvents:UIControlEventTouchUpInside];
[self.contentView addSubview:self.uploadBannerYesButton];
self.uploadBannerNoButton = [self createUploadBannerButtonWithTitle:YMLocalizedString(@"20.20.59_text_13") imageName:@"event_non_select" selectedImageName:@"event_selected" tag:1];
self.uploadBannerNoButton.selected = YES;
[self.uploadBannerNoButton addTarget:self action:@selector(uploadBannerButtonTapped:) forControlEvents:UIControlEventTouchUpInside];
[self.contentView addSubview:self.uploadBannerNoButton];
[self.uploadBannerLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.eventBannerImageView.mas_bottom).offset(kSectionSpacing);
make.leading.equalTo(self.contentView).offset(kHorizontalPadding);
}];
[self.uploadBannerYesButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.uploadBannerLabel.mas_bottom).offset(kVerticalPadding);
make.leading.equalTo(self.contentView).offset(kHorizontalPadding);
make.height.mas_equalTo(20);
make.width.mas_greaterThanOrEqualTo(80);
}];
[self.uploadBannerNoButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.uploadBannerLabel.mas_bottom).offset(kVerticalPadding);
make.leading.equalTo(self.uploadBannerYesButton.mas_trailing).offset(70);
make.height.equalTo(self.uploadBannerYesButton);
make.width.mas_greaterThanOrEqualTo(80);
}];
}
#pragma mark - Select Room Section
- (void)setupSelectRoomSection {
self.selectRoomLabel = [self createLabelWithText:YMLocalizedString(@"20.20.59_text_14")];
[self.contentView addSubview:self.selectRoomLabel];
self.selectRoomView = [self createSelectionViewWithPlaceholder:YMLocalizedString(@"XPAnchorPKTableViewCell2") target:self action:@selector(selectRoomTapped)];
[self.contentView addSubview:self.selectRoomView];
[self.selectRoomLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.uploadBannerYesButton.mas_bottom).offset(kSectionSpacing);
make.leading.equalTo(self.contentView).offset(kHorizontalPadding);
}];
[self.selectRoomView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.selectRoomLabel.mas_bottom).offset(kVerticalPadding);
make.leading.trailing.equalTo(self.contentView).inset(kHorizontalPadding);
make.height.mas_equalTo(44);
}];
}
#pragma mark - Start Time Section
- (void)setupStartTimeSection {
self.startTimeLabel = [self createLabelWithText:YMLocalizedString(@"20.20.59_text_15")];
[self.contentView addSubview:self.startTimeLabel];
self.startTimeView = [self createSelectionViewWithPlaceholder:YMLocalizedString(@"XPAnchorPKTableViewCell2")
target:self
action:@selector(selectStartTimeTapped)];
[self.contentView addSubview:self.startTimeView];
[self.startTimeLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.selectRoomView.mas_bottom).offset(kSectionSpacing);
make.leading.equalTo(self.contentView).offset(kHorizontalPadding);
}];
[self.startTimeView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.startTimeLabel.mas_bottom).offset(kVerticalPadding);
make.leading.trailing.equalTo(self.contentView).inset(kHorizontalPadding);
make.height.mas_equalTo(40);
}];
}
#pragma mark - Duration Section
- (void)setupDurationSection {
self.durationLabel = [self createLabelWithText:YMLocalizedString(@"20.20.59_text_16")];
[self.contentView addSubview:self.durationLabel];
self.durationView = [self createSelectionViewWithPlaceholder:YMLocalizedString(@"XPAnchorPKTableViewCell2") target:self action:@selector(selectDurationTapped)];
[self.contentView addSubview:self.durationView];
[self.durationLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.startTimeView.mas_bottom).offset(kSectionSpacing);
make.leading.equalTo(self.contentView).offset(kHorizontalPadding);
}];
[self.durationView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.durationLabel.mas_bottom).offset(kVerticalPadding);
make.leading.trailing.equalTo(self.contentView).inset(kHorizontalPadding);
make.height.mas_equalTo(40);
}];
}
#pragma mark - Event Content Section
- (void)setupEventContentSection {
self.eventContentLabel = [self createLabelWithText:YMLocalizedString(@"20.20.59_text_17")];
[self.contentView addSubview:self.eventContentLabel];
self.eventContentTextView = [[UITextView alloc] init];
self.eventContentTextView.backgroundColor = UIColorFromRGB(0xf2f3f7);
self.eventContentTextView.font = kFontRegular(14);
self.eventContentTextView.textColor = UIColorFromRGB(0x313131);
self.eventContentTextView.layer.cornerRadius = 8;
self.eventContentTextView.delegate = self;
[self.contentView addSubview:self.eventContentTextView];
self.eventContentCharCountLabel = [self createCharCountLabel];
[self.contentView addSubview:self.eventContentCharCountLabel];
[self.eventContentLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.durationView.mas_bottom).offset(kSectionSpacing);
make.leading.equalTo(self.contentView).offset(kHorizontalPadding);
}];
[self.eventContentTextView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.eventContentLabel.mas_bottom).offset(kVerticalPadding);
make.leading.trailing.equalTo(self.contentView).inset(kHorizontalPadding);
make.height.mas_equalTo(152);
}];
[self.eventContentCharCountLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.equalTo(self.eventContentLabel);
make.trailing.equalTo(self.eventContentTextView.mas_trailing);
}];
}
#pragma mark - Notify My Fans Section
- (void)setupNotifyMyFansSection {
self.notifyFansLabel = [self createLabelWithText:YMLocalizedString(@"20.20.59_text_18")];
[self.contentView addSubview:self.notifyFansLabel];
self.notifyFansSwitch = [[UISwitch alloc] init];
self.notifyFansSwitch.tintColor = UIColorRGBAlpha(0xFFE3AF, 0.4);
self.notifyFansSwitch.onTintColor = UIColorFromRGB(0xff8c03);
self.notifyFansSwitch.transform = CGAffineTransformMakeScale(0.8, 0.8);
[self.contentView addSubview:self.notifyFansSwitch];
[self.notifyFansLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.eventContentTextView.mas_bottom).offset(kSectionSpacing);
make.leading.equalTo(self.contentView).offset(kHorizontalPadding);
}];
[self.notifyFansSwitch mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.equalTo(self.notifyFansLabel);
make.trailing.equalTo(self.contentView).offset(-kHorizontalPadding);
make.bottom.equalTo(self.contentView).offset(-kSectionSpacing*5);
}];
[self.contentView mas_makeConstraints:^(MASConstraintMaker *make) {
make.bottom.greaterThanOrEqualTo(self.notifyFansSwitch.mas_bottom).offset(kSectionSpacing*5);
}];
}
#pragma mark - UIScrollViewDelegate
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
[self dismissKeyboard];
}
- (void)checkCreateEventButtonState {
NSString *placeholder = YMLocalizedString(@"XPAnchorPKTableViewCell2");
BOOL hasTitle = self.eventTitleTextField.text.length > 0;
BOOL hasBanner = self.selectedImage != nil;
BOOL hasRoom = self.selectRoomPlaceholderLabel.text.length > 0 && ![self.selectRoomPlaceholderLabel.text isEqualToString:placeholder];
BOOL hasStartTime = self.startTimePlaceholderLabel.text.length > 0 && ![self.startTimePlaceholderLabel.text isEqualToString:placeholder];
BOOL hasDuration = self.durationPlaceholderLabel.text.length > 0 && ![self.durationPlaceholderLabel.text isEqualToString:placeholder];
BOOL hasContent = self.eventContentTextView.text.length > 0;
if (hasTitle && hasBanner && hasRoom && hasStartTime && hasDuration && hasContent) {
self.createEventButton.alpha = 1.0;
self.createEventButton.userInteractionEnabled = YES;
} else {
self.createEventButton.alpha = 0.3;
self.createEventButton.userInteractionEnabled = NO;
}
}
#pragma mark - TZImagePickerControllerDelegate
- (void)imagePickerController:(TZImagePickerController *)picker didFinishPickingPhotos:(NSArray<UIImage *> *)photos sourceAssets:(NSArray *)assets isSelectOriginalPhoto:(BOOL)isSelectOriginalPhoto infos:(NSArray<NSDictionary *> *)infos {
if (photos.count > 0) {
UIImage *croppedImage = photos.firstObject;
self.selectedImage = croppedImage;
self.eventBannerImageView.image = croppedImage;
self.eventBannerCamearImageView.hidden = NO;
[self checkCreateEventButtonState];
}
}
// 添加拍照结果的处理方法
- (void)imagePickerController:(TZImagePickerController *)picker didFinishPickingVideo:(UIImage *)coverImage sourceAssets:(PHAsset *)asset {
// 不处理视频
}
// 处理用户拍照的情况
- (void)imagePickerController:(TZImagePickerController *)picker didFinishPickingImage:(UIImage *)image {
// 直接使用拍照的图片
self.selectedImage = image;
self.eventBannerImageView.image = image;
self.eventBannerCamearImageView.hidden = NO;
[self checkCreateEventButtonState];
}
// 处理拍照或摄像完成的回调
- (void)imagePickerController:(TZImagePickerController *)picker didFinishTakePhoto:(UIImage *)image sourceType:(TZAssetModelMediaType)sourceType cutImage:(UIImage *)cutImage isSelectOriginalPhoto:(BOOL)isSelectOriginalPhoto {
// 优先使用裁剪后的图片,如果有的话
UIImage *finalImage = cutImage ? cutImage : image;
self.selectedImage = finalImage;
self.eventBannerImageView.image = finalImage;
self.eventBannerCamearImageView.hidden = NO;
[self checkCreateEventButtonState];
}
@end