个人中心UI和逻辑

This commit is contained in:
fengshuo
2022-04-15 18:11:39 +08:00
parent 3654a52e2e
commit 071559aad2
41 changed files with 1027 additions and 96 deletions

View File

@@ -417,6 +417,9 @@
E872308926E89BE000B90D4F /* LoginPhoneViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E872308826E89BE000B90D4F /* LoginPhoneViewController.m */; };
E872308D26E89DAA00B90D4F /* LoginInputView.m in Sources */ = {isa = PBXBuildFile; fileRef = E872308C26E89DAA00B90D4F /* LoginInputView.m */; };
E872309326E8D31500B90D4F /* LoginVerifCodeView.m in Sources */ = {isa = PBXBuildFile; fileRef = E872309226E8D31500B90D4F /* LoginVerifCodeView.m */; };
E873EB02280922720071030D /* XPMineUserInfoEmptyCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E873EB01280922720071030D /* XPMineUserInfoEmptyCollectionViewCell.m */; };
E873EB05280943ED0071030D /* XPMineUserInfoGiftWallPresenter.m in Sources */ = {isa = PBXBuildFile; fileRef = E873EB04280943ED0071030D /* XPMineUserInfoGiftWallPresenter.m */; };
E873EB09280960990071030D /* XPMineUserInfoVoiceCardView.m in Sources */ = {isa = PBXBuildFile; fileRef = E873EB08280960990071030D /* XPMineUserInfoVoiceCardView.m */; };
E874B88827215D39003954B9 /* MicroStateModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E874B88727215D39003954B9 /* MicroStateModel.m */; };
E874B88B27215EAF003954B9 /* MicroQueueModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E874B88A27215EAF003954B9 /* MicroQueueModel.m */; };
E875FA8727D619820086ED04 /* ClientDataModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E875FA8627D619820086ED04 /* ClientDataModel.m */; };
@@ -1542,6 +1545,13 @@
E872308C26E89DAA00B90D4F /* LoginInputView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LoginInputView.m; sourceTree = "<group>"; };
E872309126E8D31500B90D4F /* LoginVerifCodeView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LoginVerifCodeView.h; sourceTree = "<group>"; };
E872309226E8D31500B90D4F /* LoginVerifCodeView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LoginVerifCodeView.m; sourceTree = "<group>"; };
E873EB00280922720071030D /* XPMineUserInfoEmptyCollectionViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPMineUserInfoEmptyCollectionViewCell.h; sourceTree = "<group>"; };
E873EB01280922720071030D /* XPMineUserInfoEmptyCollectionViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPMineUserInfoEmptyCollectionViewCell.m; sourceTree = "<group>"; };
E873EB03280943ED0071030D /* XPMineUserInfoGiftWallPresenter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPMineUserInfoGiftWallPresenter.h; sourceTree = "<group>"; };
E873EB04280943ED0071030D /* XPMineUserInfoGiftWallPresenter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPMineUserInfoGiftWallPresenter.m; sourceTree = "<group>"; };
E873EB06280944020071030D /* XPMineUserInfoGiftWallProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPMineUserInfoGiftWallProtocol.h; sourceTree = "<group>"; };
E873EB07280960990071030D /* XPMineUserInfoVoiceCardView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPMineUserInfoVoiceCardView.h; sourceTree = "<group>"; };
E873EB08280960990071030D /* XPMineUserInfoVoiceCardView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPMineUserInfoVoiceCardView.m; sourceTree = "<group>"; };
E874B88627215D39003954B9 /* MicroStateModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MicroStateModel.h; sourceTree = "<group>"; };
E874B88727215D39003954B9 /* MicroStateModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MicroStateModel.m; sourceTree = "<group>"; };
E874B88927215EAF003954B9 /* MicroQueueModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MicroQueueModel.h; sourceTree = "<group>"; };
@@ -4674,6 +4684,8 @@
E88B5CC426FB42B000DA9178 /* XPMineUserInfoHeaderView.m */,
E8EEB91B26FC9D58007C6EBA /* XPMineUserInfoDateView.h */,
E8EEB91C26FC9D58007C6EBA /* XPMineUserInfoDateView.m */,
E873EB07280960990071030D /* XPMineUserInfoVoiceCardView.h */,
E873EB08280960990071030D /* XPMineUserInfoVoiceCardView.m */,
);
path = MineInfo;
sourceTree = "<group>";
@@ -5710,6 +5722,8 @@
E8EEB90026FC31B6007C6EBA /* XPMineUserInfoPresenter.m */,
E8D34D5E28082BA5009C4835 /* XPMineUserDataPresenter.h */,
E8D34D5F28082BA5009C4835 /* XPMineUserDataPresenter.m */,
E873EB03280943ED0071030D /* XPMineUserInfoGiftWallPresenter.h */,
E873EB04280943ED0071030D /* XPMineUserInfoGiftWallPresenter.m */,
E8EEB90D26FC6AB8007C6EBA /* XPMineUserInfoEditPresenter.h */,
E8EEB90E26FC6AB8007C6EBA /* XPMineUserInfoEditPresenter.m */,
E8B846C326FDB41A00A777FE /* XPMineUserInfolbumPresenter.h */,
@@ -5743,6 +5757,7 @@
E88B5CB926FB327500DA9178 /* XPMineTeenagerPwdProtocol.h */,
E8EEB90226FC31CE007C6EBA /* XPMineUserInfoProtocol.h */,
E8D34D6128082BD4009C4835 /* XPMineUserDataProtocol.h */,
E873EB06280944020071030D /* XPMineUserInfoGiftWallProtocol.h */,
E8EEB91026FC6AD3007C6EBA /* XPMineUserInfoEditProtocol.h */,
E8B846C626FDB44100A777FE /* XPMineUserInfoAlbumProtocol.h */,
E8B846D726FDE16300A777FE /* XPMineRechargeProtocol.h */,
@@ -5843,6 +5858,8 @@
E8D34D5528080393009C4835 /* XPMineDataGiftCollectionViewCell.m */,
E8D34D6528084E88009C4835 /* XPMineUserInfoGiftWallCollectionViewCell.h */,
E8D34D6628084E88009C4835 /* XPMineUserInfoGiftWallCollectionViewCell.m */,
E873EB00280922720071030D /* XPMineUserInfoEmptyCollectionViewCell.h */,
E873EB01280922720071030D /* XPMineUserInfoEmptyCollectionViewCell.m */,
);
path = MineInfo;
sourceTree = "<group>";
@@ -6450,6 +6467,7 @@
E8D34D4728080295009C4835 /* XPMineUserDataViewController.m in Sources */,
E801275127E3281100BAC3F2 /* XPRoomPKTimeTableViewCell.m in Sources */,
E8EEB90F26FC6AB8007C6EBA /* XPMineUserInfoEditPresenter.m in Sources */,
E873EB09280960990071030D /* XPMineUserInfoVoiceCardView.m in Sources */,
E8AC723A26F49AAE007D6E91 /* XPMineNotifyStatus.m in Sources */,
18E7B33226F317A20064BC9B /* XPWebViewController.m in Sources */,
E8AEAEF927141CA30017FCE0 /* RoomHeaderView.m in Sources */,
@@ -6499,6 +6517,7 @@
E8D34D532808037E009C4835 /* XPMineDataSkillDataCollectionViewCell.m in Sources */,
E83DB47D2746372300D8CBD1 /* XPRoomGiftBannerView.m in Sources */,
9BAA5FED277A1BBE007453F3 /* XPPrivacyViewController.m in Sources */,
E873EB02280922720071030D /* XPMineUserInfoEmptyCollectionViewCell.m in Sources */,
E872309326E8D31500B90D4F /* LoginVerifCodeView.m in Sources */,
E87E91552796B6DE00A7B3F2 /* XPRoomInviteUserViewController.m in Sources */,
E880B3B5278C1FE400A83B0D /* XPAcrossRoomPKPresenter.m in Sources */,
@@ -6644,6 +6663,7 @@
E855516728059692005F293F /* GuildIncomeDetailModel.m in Sources */,
E89DA67227008D59008483C1 /* WalletInfoModel.m in Sources */,
E8001632280409FD00D6D17A /* XPGuildPersonIncomeTableViewCell.m in Sources */,
E873EB05280943ED0071030D /* XPMineUserInfoGiftWallPresenter.m in Sources */,
E801274727E3241700BAC3F2 /* Api+RoomPK.m in Sources */,
E85551642805937A005F293F /* XPGuildIncomeDetailCollectionViewCell.m in Sources */,
E80CBDEA27D0C53F001E1EC2 /* XPWeakTimer.m in Sources */,

View File

@@ -0,0 +1,22 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "common_icon_beautiful@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "common_icon_beautiful@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1023 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -0,0 +1,22 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "mine_user_info_header_page_bg@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "mine_user_info_header_page_bg@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 253 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 356 B

View File

@@ -0,0 +1,22 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "mine_user_info_skill_card_voice_note@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "mine_user_info_skill_card_voice_note@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 425 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 620 B

View File

@@ -0,0 +1,22 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "mine_user_info_skill_card_voice_pause@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "mine_user_info_skill_card_voice_pause@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 552 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@@ -0,0 +1,22 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "mine_user_info_skill_card_voice_play@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "mine_user_info_skill_card_voice_play@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 636 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -16,6 +16,14 @@ NS_ASSUME_NONNULL_BEGIN
/// 获取家族相亲的信息
/// @param uid 用户的uid
- (void)getClanDetailInfo:(NSString *)uid;
/// 获取会长和当前用户家族详细的信息
/// @param uid 用户的uid
- (void)getClanDetailInfo:(NSString *)uid currentUserUid:(NSString *)currentUserUid;
/// 用户申请加入公会
/// @param hallId 公会的id
- (void)memberApplyHall:(NSString *)hallId;
@end
NS_ASSUME_NONNULL_END

View File

@@ -6,9 +6,11 @@
//
#import "XPMineUserDataPresenter.h"
#import <ReactiveObjC/ReactiveObjC.h>
#import "Api+SkillCard.h"
#import "Api+Guild.h"
#import "ClanDetailInfoModel.h"
#import "AccountInfoStorage.h"
#import "MineSkillCardListInfoModel.h"
#import "XPMineUserDataProtocol.h"
@@ -22,12 +24,46 @@
}] uid:uid];
}
///
///
/// @param uid uid
- (void)getClanDetailInfo:(NSString *)uid {
- (void)getClanDetailInfo:(NSString *)uid currentUserUid:(NSString *)currentUserUid {
RACSubject* owner = [RACSubject subject];
RACSubject* currentUser = [RACSubject subject];
[[RACSignal combineLatest:@[owner, currentUser] reduce:^id(ClanDetailInfoModel* ownerClanInfo, ClanDetailInfoModel* currentUserClanInfo){
[[self getView] getClanDetailInfoSuccess:ownerClanInfo currentUserClanInfo:currentUserClanInfo];
return nil;
}] subscribeError:^(NSError * _Nullable error) {
}];
[Api getClanDetailInfo:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
ClanDetailInfoModel * clanDetailInfo = [ClanDetailInfoModel modelWithDictionary:data.data];
[[self getView] getClanDetailInfoSuccess:clanDetailInfo];
[currentUser sendNext:clanDetailInfo];
[currentUser sendCompleted];
}fail:^(NSInteger code, NSString * _Nullable msg) {
[currentUser sendNext:nil];
[currentUser sendCompleted];
}] uid:currentUserUid];
[Api getClanDetailInfo:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
ClanDetailInfoModel * clanDetailInfo = [ClanDetailInfoModel modelWithDictionary:data.data];
[owner sendNext:clanDetailInfo];
[owner sendCompleted];
}fail:^(NSInteger code, NSString * _Nullable msg) {
[owner sendNext:nil];
[owner sendCompleted];
}] uid:uid];
}
///
/// @param hallId id
- (void)memberApplyHall:(NSString *)hallId {
NSString * uid = [AccountInfoStorage instance].getUid;
[Api memberApplyHall:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
[[self getView] memberApplyHallSuccess];
} showLoading:YES] hallId:hallId uid:uid];
}
@end

View File

@@ -0,0 +1,16 @@
//
// XPMineUserInfoGiftWallPresenter.h
// xplan-ios
//
// Created by 冯硕 on 2022/4/15.
//
#import "BaseMvpPresenter.h"
NS_ASSUME_NONNULL_BEGIN
@interface XPMineUserInfoGiftWallPresenter : BaseMvpPresenter
- (void)getUserGiftWall:(NSString *)uid;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,22 @@
//
// XPMineUserInfoGiftWallPresenter.m
// xplan-ios
//
// Created by on 2022/4/15.
//
#import "XPMineUserInfoGiftWallPresenter.h"
#import "Api+Mine.h"
#import "XPMineUserInfoGiftWallProtocol.h"
#import "UserGiftWallInfoModel.h"
@implementation XPMineUserInfoGiftWallPresenter
- (void)getUserGiftWall:(NSString *)uid {
[Api getUserGiftWall:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
NSArray * array= [UserGiftWallInfoModel modelsWithArray:data.data];
[[self getView] getUserGiftWallSuccess:array];
}] uid:uid orderType:@"2"];
}
@end

View File

@@ -12,8 +12,10 @@ NS_ASSUME_NONNULL_BEGIN
@protocol XPMineUserDataProtocol <NSObject>
///获取用户的技能卡成功
- (void)getUserSkillCardListSuccess:(NSArray *)list;
///获取家族信息成功
- (void)getClanDetailInfoSuccess:(ClanDetailInfoModel *)clanInfo;
///获取家族详情成功
- (void)getClanDetailInfoSuccess:(ClanDetailInfoModel *)clanDetailInfo currentUserClanInfo:(ClanDetailInfoModel *)currentUserClanInfo;
///申请加入工会成功
- (void)memberApplyHallSuccess;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,19 @@
//
// XPMineUserInfoGiftWallProtocol.h
// xplan-ios
//
// Created by 冯硕 on 2022/4/15.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@protocol XPMineUserInfoGiftWallProtocol <NSObject>
///获取礼物墙成功
- (void)getUserGiftWallSuccess:(NSArray *)giftList;
@end
NS_ASSUME_NONNULL_END

View File

@@ -14,8 +14,15 @@ NS_ASSUME_NONNULL_BEGIN
- (void)xPMineDataClanTableViewCell:(XPMineDataClanTableViewCell *)view didClickFold:(UIButton *)sender;
///点击了加入公会
- (void)xPMineDataClanTableViewCell:(XPMineDataClanTableViewCell *)view didClickEnter:(ClanDetailInfoModel *)clanInfo;
///点击了公会
- (void)xPMineDataClanTableViewCell:(XPMineDataClanTableViewCell *)view didClickClanView:(ClanDetailInfoModel *)clanInfo;
///点击了工会房间
- (void)xPMineDataClanTableViewCell:(XPMineDataClanTableViewCell *)view didClickHallView:(ClanDetailInfoModel *)clanInfo;
@end
@interface XPMineDataClanTableViewCell : UITableViewCell
///是否展示加入工会
@property (nonatomic,assign) BOOL isShowEnterHall;
@property (nonatomic,strong) ClanDetailInfoModel *clanInfo;
///代理
@property (nonatomic,weak) id<XPMineDataClanTableViewCellDelegate> delegate;

View File

@@ -16,7 +16,7 @@
@interface XPMineDataClanTableViewCell ()
///
@property (nonatomic,strong) UIImageView *backImageView;
@property (nonatomic,strong) UIView *backView;
///
@property (nonatomic,strong) UILabel *titleLabel;
///
@@ -60,9 +60,9 @@
self.isfold = YES;
self.backgroundColor = [UIColor clearColor];
self.selectionStyle = UITableViewCellSelectionStyleNone;
[self.contentView addSubview:self.backImageView];
[self.backImageView addSubview:self.titleLabel];
[self.backImageView addSubview:self.stackView];
[self.contentView addSubview:self.backView];
[self.backView addSubview:self.titleLabel];
[self.backView addSubview:self.stackView];
[self.stackView addArrangedSubview:self.clanView];
[self.stackView addArrangedSubview:self.hallView];
@@ -79,21 +79,21 @@
}
- (void)initSubViewConstraints {
[self.backImageView mas_makeConstraints:^(MASConstraintMaker *make) {
[self.backView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.mas_equalTo(self.contentView).inset(15);
make.top.mas_equalTo(self.contentView);
make.bottom.mas_equalTo(self.contentView).offset(-15);
}];
[self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.mas_equalTo(self.backImageView).offset(12);
make.top.mas_equalTo(self.backImageView).offset(10);
make.left.mas_equalTo(self.backView).offset(12);
make.top.mas_equalTo(self.backView).offset(10);
}];
[self.stackView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.mas_equalTo(self.backImageView).offset(10);
make.left.mas_equalTo(self.backView).offset(10);
make.top.mas_equalTo(self.titleLabel.mas_bottom).offset(5);
make.right.mas_equalTo(self.backImageView).offset(-10);
make.right.mas_equalTo(self.backView).offset(-10);
}];
[self.clanView mas_makeConstraints:^(MASConstraintMaker *make) {
@@ -117,7 +117,7 @@
}];
[self.foldButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.size.mas_equalTo(CGSizeMake(16, 8));
make.size.mas_equalTo(CGSizeMake(13, 22));
make.right.mas_equalTo(self.clanView);
make.centerY.mas_equalTo(self.clanView);
}];
@@ -159,21 +159,53 @@
}
- (void)foldButtonAction:(UIButton *)sender{
sender.selected = !sender.selected;
self.hallView.hidden = !self.hallView.hidden;
[UIView animateWithDuration:0.2 animations:^{
if (self.foldButton.selected) {
self.foldButton.transform = CGAffineTransformIdentity;
} else {
self.foldButton.transform = CGAffineTransformMakeRotation(M_PI / 2);
}
}];
if (self.delegate && [self.delegate respondsToSelector:@selector(xPMineDataClanTableViewCell:didClickFold:)]) {
[self.delegate xPMineDataClanTableViewCell:self didClickFold:sender];
}
}
- (void)didTapClanView {
if (self.delegate && [self.delegate respondsToSelector:@selector(xPMineDataClanTableViewCell:didClickClanView:)]) {
[self.delegate xPMineDataClanTableViewCell:self didClickClanView:self.clanInfo];
}
}
- (void)didTapHallView {
if (self.delegate && [self.delegate respondsToSelector:@selector(xPMineDataClanTableViewCell:didClickHallView:)]) {
[self.delegate xPMineDataClanTableViewCell:self didClickHallView:self.clanInfo];
}
}
#pragma mark - Getters And Setters
- (void)setClanInfo:(ClanDetailInfoModel *)clanInfo {
_clanInfo = clanInfo;
if (_clanInfo) {
self.clanView.hidden = _clanInfo.clan.elderUid.length <= 0;
if (self.isfold) {
self.hallView.hidden = YES;
if (self.clanInfo.clan.elderUid.length > 0) {
if (self.clanInfo.hall.ownerUid.length > 0) {
self.clanView.hidden = NO;
self.hallView.hidden = self.isfold ? YES : NO;
} else {
self.hallView.hidden = _clanInfo.hall.ownerUid.length <= 0;
self.clanView.hidden = NO;
self.hallView.hidden = YES;
}
} else {
if (self.clanInfo.hall.ownerUid.length > 0) {
self.clanView.hidden = YES;
self.hallView.hidden = NO;
} else {
self.clanView.hidden = YES;
self.hallView.hidden = YES;
}
}
self.clanImageView.imageUrl = _clanInfo.clan.avatar;
self.clanNickLabel.text = _clanInfo.clan.name;
@@ -183,17 +215,23 @@
}
}
- (UIImageView *)backImageView {
if (!_backImageView) {
_backImageView = [[UIImageView alloc] init];
_backImageView.userInteractionEnabled = YES;
_backImageView.layer.cornerRadius = 10;
_backImageView.backgroundColor =[ThemeColor appCellBackgroundColor];
_backImageView.layer.shadowColor = UIColorFromRGB(0xE4E4E4).CGColor;
_backImageView.layer.shadowOffset = CGSizeMake(0, 2);
_backImageView.layer.shadowRadius = 8;
- (void)setIsShowEnterHall:(BOOL)isShowEnterHall {
_isShowEnterHall = isShowEnterHall;
self.enterButton.hidden = !_isShowEnterHall;
}
return _backImageView;
- (UIView *)backView {
if (!_backView) {
_backView = [[UIView alloc] init];
_backView.userInteractionEnabled = YES;
_backView.layer.cornerRadius = 10;
_backView.backgroundColor =[ThemeColor appCellBackgroundColor];
_backView.layer.shadowColor = UIColorFromRGB(0xE4E4E4).CGColor;
_backView.layer.shadowOffset = CGSizeMake(0, 2);
_backView.layer.shadowRadius = 8;
}
return _backView;
}
- (UILabel *)titleLabel {
@@ -233,6 +271,9 @@
_clanImageView = [[NetImageView alloc] initWithConfig:config];
_clanImageView.layer.masksToBounds = YES;
_clanImageView.layer.cornerRadius = 8;
_clanImageView.userInteractionEnabled = YES;
UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTapClanView)];
[_clanImageView addGestureRecognizer:tap];
}
return _clanImageView;
}
@@ -258,9 +299,10 @@
- (UIButton *)foldButton {
if (!_foldButton) {
_foldButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_foldButton setImage:[UIImage imageNamed:@"icon_unattention"] forState:UIControlStateNormal];
[_foldButton setImage:[UIImage imageNamed:@"icon_small_attention"] forState:UIControlStateSelected];
[_foldButton setImage:[UIImage imageNamed:@"common_right_arrow"] forState:UIControlStateNormal];
[_foldButton setImage:[UIImage imageNamed:@"common_right_arrow"] forState:UIControlStateSelected];
[_foldButton addTarget:self action:@selector(foldButtonAction:) forControlEvents:UIControlEventTouchUpInside];
_foldButton.transform = CGAffineTransformMakeRotation(M_PI / 2);
}
return _foldButton;
}
@@ -290,6 +332,9 @@
_hallImageView = [[NetImageView alloc] initWithConfig:config];
_hallImageView.layer.masksToBounds = YES;
_hallImageView.layer.cornerRadius = 8;
_hallImageView.userInteractionEnabled = YES;
UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTapHallView)];
[_hallImageView addGestureRecognizer:tap];
}
return _hallImageView;
}

View File

@@ -20,6 +20,8 @@
@property (nonatomic,strong) UILabel *titleLabel;
///
@property (nonatomic,strong) UICollectionView *collectionView;
///
@property (nonatomic,strong) UILabel *emptyLabel;
@end
@implementation XPMineDataSkillCardTableViewCell
@@ -40,6 +42,7 @@
[self.backImageView addSubview:self.titleLabel];
[self.backImageView addSubview:self.collectionView];
[self.backImageView addSubview:self.emptyLabel];
}
- (void)initSubViewConstraints {
@@ -60,6 +63,12 @@
make.height.mas_equalTo(47);
make.right.mas_equalTo(self.backImageView).offset(-6);
}];
[self.emptyLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.mas_equalTo(self.backImageView).inset(10);
make.top.mas_equalTo(self.titleLabel.mas_bottom).offset(12);
make.height.mas_equalTo(47);
}];
}
#pragma mark - UICollectionViewDelegate And UICollectionViewDatasource
@@ -86,6 +95,13 @@
#pragma mark - Getters And Setters
- (void)setDatasourece:(NSArray *)datasourece {
_datasourece = datasourece;
if (_datasourece.count > 0) {
self.emptyLabel.hidden = YES;
self.collectionView.hidden = NO;
} else {
self.emptyLabel.hidden = NO;
self.collectionView.hidden = YES;
}
[self.collectionView reloadData];
}
@@ -123,13 +139,28 @@
layout.sectionInset = UIEdgeInsetsMake(0, 0, 0, 0);
_collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout];
_collectionView.dataSource = self;
_collectionView.showsHorizontalScrollIndicator = NO;
_collectionView.delegate = self;
_collectionView.tag = 1005;
_collectionView.backgroundColor = [UIColor clearColor];
[_collectionView registerClass:[XPMineDataSkillDataCollectionViewCell class] forCellWithReuseIdentifier:NSStringFromClass([XPMineDataSkillDataCollectionViewCell class])];
}
return _collectionView;
}
- (UILabel *)emptyLabel {
if (!_emptyLabel) {
_emptyLabel = [[UILabel alloc] init];
_emptyLabel.text = @"还未添加技能卡喔";
_emptyLabel.font = [UIFont systemFontOfSize:10];
_emptyLabel.textAlignment = NSTextAlignmentCenter;
_emptyLabel.backgroundColor = UIColorFromRGB(0xF4F7FF);
_emptyLabel.layer.masksToBounds = YES;
_emptyLabel.layer.cornerRadius = 8;
_emptyLabel.textColor = [ThemeColor secondTextColor];
}
return _emptyLabel;
}
@end

View File

@@ -69,6 +69,27 @@
make.top.mas_equalTo(self.logoImageView.mas_centerY).offset(2);
}];
}
- (UIColor *)getSkillCardBackColor:(NSString *)cardId {
UIColor * color = UIColorFromRGB(0xFEF5E8);
if ([cardId isEqualToString:@"1"]) {
color = UIColorFromRGB(0xEEF2FF);
} else if([cardId isEqualToString:@"2"]) {
color = UIColorFromRGB(0xFEF5E8);
}else if([cardId isEqualToString:@"3"]) {
color = UIColorFromRGB(0xF2FFE0);
}else if([cardId isEqualToString:@"4"]) {
color = UIColorFromRGB(0xE9FFF4);
}else if([cardId isEqualToString:@"5"]) {
color = UIColorFromRGB(0xFFE7EF);
}else if([cardId isEqualToString:@"6"]) {
color = UIColorFromRGB(0xF9ECFF);
}else if([cardId isEqualToString:@"7"]) {
color = UIColorFromRGB(0xFFE4FB);
}else if([cardId isEqualToString:@"9"]) {
color = UIColorFromRGB(0xF7EFDB);
}
return color;
}
#pragma mark - Getters And Setters
- (void)setSkillInfo:(MineSkillCardListInfoModel *)skillInfo {
@@ -78,6 +99,7 @@
NSString * title = [_skillInfo.propVals componentsJoinedByString:@"/"];
self.skillLabel.text = title;
self.titleLabel.text = _skillInfo.name;
self.backView.backgroundColor = [self getSkillCardBackColor:skillInfo.cardId];
}
}

View File

@@ -0,0 +1,16 @@
//
// XPMineUserInfoEmptyCollectionViewCell.h
// xplan-ios
//
// Created by 冯硕 on 2022/4/15.
//
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface XPMineUserInfoEmptyCollectionViewCell : UICollectionViewCell
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,72 @@
//
// XPMineUserInfoEmptyCollectionViewCell.m
// xplan-ios
//
// Created by on 2022/4/15.
//
#import "XPMineUserInfoEmptyCollectionViewCell.h"
///Third
#import <Masonry/Masonry.h>
///Tool
#import "ThemeColor.h"
#import "UIImageConstant.h"
@interface XPMineUserInfoEmptyCollectionViewCell ()
@property (nonatomic,strong) UIImageView *emptyImageView;
@property (nonatomic,strong) UILabel *titleLabel;
@end
@implementation XPMineUserInfoEmptyCollectionViewCell
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self initSubViews];
[self initSubViewConstraints];
}
return self;
}
#pragma mark - Private Method
- (void)initSubViews {
[self.contentView addSubview:self.emptyImageView];
[self.contentView addSubview:self.titleLabel];
}
- (void)initSubViewConstraints {
[self.emptyImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.mas_equalTo(self.contentView);
make.top.mas_equalTo(self.contentView).offset(150);
make.size.mas_equalTo(CGSizeMake(100, 100));
}];
[self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.emptyImageView.mas_bottom).offset(20);
make.left.right.mas_equalTo(self.contentView);
}];
}
#pragma mark - Getters And Setters
- (UIImageView *)emptyImageView {
if (!_emptyImageView) {
_emptyImageView = [[UIImageView alloc] init];
_emptyImageView.userInteractionEnabled = YES;
_emptyImageView.image = [UIImageConstant defalutEmptyPlaceholder];
_emptyImageView.layer.masksToBounds = YES;
_emptyImageView.contentMode = UIViewContentModeScaleAspectFit;
}
return _emptyImageView;
}
- (UILabel *)titleLabel {
if (!_titleLabel) {
_titleLabel = [[UILabel alloc] init];
_titleLabel.text = @"还未收到过礼物";
_titleLabel.font = [UIFont systemFontOfSize:16];
_titleLabel.textAlignment = NSTextAlignmentCenter;
_titleLabel.textColor = [ThemeColor secondTextColor];
}
return _titleLabel;
}
@end

View File

@@ -8,9 +8,9 @@
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@class UserGiftWallInfoModel;
@interface XPMineUserInfoGiftWallCollectionViewCell : UICollectionViewCell
@property (nonatomic,strong) UserGiftWallInfoModel *giftInfo;
@end
NS_ASSUME_NONNULL_END

View File

@@ -8,7 +8,150 @@
#import "XPMineUserInfoGiftWallCollectionViewCell.h"
///Third
#import <Masonry/Masonry.h>
///Tool
#import "ThemeColor.h"
#import "NetImageView.h"
///Model
#import "UserGiftWallInfoModel.h"
@interface XPMineUserInfoGiftWallCollectionViewCell ()
///
@property (nonatomic,strong) NetImageView *giftImageView;
///
@property (nonatomic,strong) UIButton *numberButton;
///
@property (nonatomic,strong) UILabel *giftNameLabel;
///
@property (nonatomic,strong) UIStackView *stackView;
///
@property (nonatomic,strong) UIImageView *diamondImageView;
///
@property (nonatomic,strong) UILabel *giftPriceLabel;
@end
@implementation XPMineUserInfoGiftWallCollectionViewCell
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
[self initSubViews];
[self initSubViewConstraints];
}
return self;
}
#pragma mark - Private Method
- (void)initSubViews {
self.backgroundColor = [UIColor clearColor];
[self.contentView addSubview:self.giftImageView];
[self.contentView addSubview:self.numberButton];
[self.contentView addSubview:self.giftNameLabel];
[self.contentView addSubview:self.stackView];
[self.stackView addArrangedSubview:self.diamondImageView];
[self.stackView addArrangedSubview:self.giftPriceLabel];
}
- (void)initSubViewConstraints {
[self.giftImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.mas_equalTo(self.contentView).inset(5);
make.top.mas_equalTo(self.contentView);
make.height.mas_equalTo(self.giftImageView.mas_width);
}];
[self.numberButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.size.mas_equalTo(CGSizeMake(55, 15));
make.centerX.mas_equalTo(self.contentView);
make.top.mas_equalTo(self.giftImageView.mas_bottom).offset(2);
}];
[self.giftNameLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.mas_equalTo(self.contentView);
make.top.mas_equalTo(self.numberButton.mas_bottom).offset(10);
}];
[self.stackView mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.mas_equalTo(self.contentView);
make.top.mas_equalTo(self.giftNameLabel.mas_bottom).offset(3);
}];
[self.diamondImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.size.mas_equalTo(CGSizeMake(13, 13));
}];
}
#pragma mark - Getters And Setters
- (void)setGiftInfo:(UserGiftWallInfoModel *)giftInfo {
_giftInfo = giftInfo;
if (_giftInfo) {
self.giftImageView.imageUrl = _giftInfo.picUrl;
self.giftNameLabel.text = _giftInfo.giftName;
self.giftPriceLabel.text = [NSString stringWithFormat:@"%ld", _giftInfo.giftPrice];
[self.numberButton setTitle:[NSString stringWithFormat:@"%ld", _giftInfo.reciveCount] forState:UIControlStateNormal];
}
}
- (NetImageView *)giftImageView {
if (!_giftImageView) {
NetImageConfig * config = [[NetImageConfig alloc]init];
config.imageType = ImageTypeUserIcon;
config.placeHolder = [UIImageConstant defaultAvatarPlaceholder];
_giftImageView = [[NetImageView alloc] initWithConfig:config];
_giftImageView.contentMode = UIViewContentModeScaleAspectFill;
_giftImageView.layer.masksToBounds = YES;
}
return _giftImageView;
}
- (UIButton *)numberButton {
if (!_numberButton) {
_numberButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_numberButton setBackgroundColor:UIColorRGBAlpha(0xFFC000, 0.2)];
[_numberButton setTitleColor:[ThemeColor appMainColor] forState:UIControlStateNormal];
_numberButton.titleLabel.font = [UIFont systemFontOfSize:10];
_numberButton.layer.masksToBounds = YES;
_numberButton.layer.cornerRadius = 15 / 2;
}
return _numberButton;
}
- (UILabel *)giftNameLabel {
if (!_giftNameLabel) {
_giftNameLabel = [[UILabel alloc] init];
_giftNameLabel.font = [UIFont systemFontOfSize:13];
_giftNameLabel.textColor = [ThemeColor mainTextColor];
_giftNameLabel.textAlignment = NSTextAlignmentCenter;
}
return _giftNameLabel;
}
- (UIStackView *)stackView {
if (!_stackView) {
_stackView = [[UIStackView alloc] init];
_stackView.axis = UILayoutConstraintAxisHorizontal;
_stackView.distribution = UIStackViewDistributionFill;
_stackView.alignment = UIStackViewAlignmentFill;
_stackView.spacing = 3;
}
return _stackView;
}
- (UIImageView *)diamondImageView {
if (!_diamondImageView) {
_diamondImageView = [[UIImageView alloc] init];
_diamondImageView.userInteractionEnabled = YES;
_diamondImageView.image = [UIImage imageNamed:@"common_diamond"];
}
return _diamondImageView;
}
- (UILabel *)giftPriceLabel {
if (!_giftPriceLabel) {
_giftPriceLabel = [[UILabel alloc] init];
_giftPriceLabel.font = [UIFont systemFontOfSize:11];
_giftPriceLabel.textColor = [ThemeColor secondTextColor];
}
return _giftPriceLabel;
}
@end

View File

@@ -116,6 +116,12 @@ NS_ASSUME_NONNULL_BEGIN
/// @param uid 自己的UID
+ (void)quitGuildRoom:(HttpRequestHelperCompletion)completion uid:(NSString *)uid;
/// 申请加入公会房间
/// @param completion 完成
/// @param hallId 公会的id
/// @param uid 要加入用户的uid
+ (void)memberApplyHall:(HttpRequestHelperCompletion)completion hallId:(NSString *)hallId uid:(NSString *)uid;
/// 家族收入列表
/// @param completion 完成
/// @param uid 用户的uid

View File

@@ -146,6 +146,15 @@
[self makeRequest:@"hall/quit" method:HttpRequestHelperMethodPOST completion:completion, __FUNCTION__, uid, nil];
}
///
/// @param completion
/// @param hallId id
/// @param uid uid
+ (void)memberApplyHall:(HttpRequestHelperCompletion)completion hallId:(NSString *)hallId uid:(NSString *)uid {
[self makeRequest:@"hall/apply" method:HttpRequestHelperMethodPOST completion:completion,__FUNCTION__, hallId, uid, nil];
}
#pragma mark -
///

View File

@@ -63,9 +63,6 @@
[owner sendNext:nil];
[owner sendCompleted];
}] uid:uid];
}
///

View File

@@ -8,11 +8,19 @@
#import "MvpViewController.h"
#import <JXPagingView/JXPagerView.h>
NS_ASSUME_NONNULL_BEGIN
@class UserInfoModel;
@class UserInfoModel, MineSkillCardListInfoModel, XPMineUserDataViewController;
@protocol XPMineUserDataViewControllerDelegate <NSObject>
///请求技能卡中有声音的技能
- (void)xPMineUserDataViewController:(XPMineUserDataViewController *)viewController didGetVoiceSuccess:(MineSkillCardListInfoModel *)voiceCard;
@end
@interface XPMineUserDataViewController : MvpViewController<JXPagerViewListViewDelegate>
@property (nonatomic,copy) NSString *userUid;
///用户信息
@property (nonatomic,strong) UserInfoModel *userInfo;
///代理
@property (nonatomic,weak) id<XPMineUserDataViewControllerDelegate> delegate;
@end
NS_ASSUME_NONNULL_END

View File

@@ -8,6 +8,8 @@
#import "XPMineUserDataViewController.h"
///Third
#import <Masonry/Masonry.h>
///Tool
#import "AccountInfoStorage.h"
///View
#import "XPMineDataSkillCardTableViewCell.h"
#import "XPMineDataClanTableViewCell.h"
@@ -15,11 +17,15 @@
///Model
#import "ClanDetailInfoModel.h"
#import "UserInfoModel.h"
#import "MineSkillCardListInfoModel.h"
///P
#import "XPMineUserDataPresenter.h"
#import "XPMineUserDataProtocol.h"
///View
#import "XPSkillCardViewController.h"
#import "XPMineUserInfoGiftWallViewController.h"
#import "XPMineClanViewController.h"
#import "XPMineGuildViewController.h"
@interface XPMineUserDataViewController ()<XPMineUserDataProtocol, UITableViewDelegate, UITableViewDataSource, XPMineDataClanTableViewCellDelegate, XPMineDataGiftTableViewCellDelegate, XPMineDataSkillCardTableViewCellDelegate>
///
@property (nonatomic,strong) UITableView *tableView;
@@ -30,6 +36,8 @@
///
@property (nonatomic,assign) BOOL isFold;
@property (nonatomic, copy) void(^scrollCallback)(UIScrollView *scrollView);
///
@property (nonatomic,assign) BOOL isShowEnterClan;
@end
@implementation XPMineUserDataViewController
@@ -51,8 +59,9 @@
#pragma mark - Http
- (void)initHettpRequest {
self.isFold = YES;
self.isShowEnterClan = NO;
[self.presenter getUserSkillCardList:self.userUid];
[self.presenter getClanDetailInfo:self.userUid];
[self.presenter getClanDetailInfo:self.userUid currentUserUid:[AccountInfoStorage instance].getUid];
}
#pragma mark - Private Method
- (void)initSubViews {
@@ -84,14 +93,19 @@
if (indexPath.section == 0) {
return 115;
} else if(indexPath.section == 1) {
CGFloat itemHeigh = 40 + 15;
if (self.clanDetailInfo.clan.elderUid.length > 0) {
if (self.clanDetailInfo.hall.ownerUid.length > 0) {
return self.isFold ? 115 : (115 + 60);
return self.isFold ? (itemHeigh + 68) : (itemHeigh + 68 + 60);
}else {
return 115;
return (itemHeigh + 60);
}
}else {
return 75;
if (self.clanDetailInfo.hall.ownerUid.length > 0) {
return (itemHeigh + 60);
} else {
return 0;
}
}
} else {
if (self.userInfo.userGiftWall.count > 0) {
@@ -123,11 +137,11 @@
cell.datasourece = self.skillArray;
return cell;
} else if(indexPath.section == 1) {
XPMineDataClanTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPMineDataClanTableViewCell class])];
if (cell == nil) {
cell = [[XPMineDataClanTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:NSStringFromClass([XPMineDataClanTableViewCell class])];
}
cell.isShowEnterHall = self.isShowEnterClan;
cell.delegate = self;
cell.clanInfo = self.clanDetailInfo;
return cell;
@@ -144,17 +158,32 @@
#pragma mark - XPMineDataClanTableViewCellDelegate
- (void)xPMineDataClanTableViewCell:(XPMineDataClanTableViewCell *)view didClickFold:(UIButton *)sender {
self.isFold = sender.selected;
self.isFold = !sender.selected;
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationNone];
}
- (void)xPMineDataClanTableViewCell:(XPMineDataClanTableViewCell *)view didClickEnter:(ClanDetailInfoModel *)clanInfo {
//TODO:
[self.presenter memberApplyHall:clanInfo.hall.hallId];
}
- (void)xPMineDataClanTableViewCell:(XPMineDataClanTableViewCell *)view didClickClanView:(ClanDetailInfoModel *)clanInfo {
XPMineClanViewController * clanVC = [[XPMineClanViewController alloc] init];
clanVC.uid = self.clanDetailInfo.clan.elderUid;
[self.navigationController pushViewController:clanVC animated:YES];
}
- (void)xPMineDataClanTableViewCell:(XPMineDataClanTableViewCell *)view didClickHallView:(ClanDetailInfoModel *)clanInfo {
XPMineGuildViewController * hallVC = [[XPMineGuildViewController alloc] init];
hallVC.ownerUid = clanInfo.hall.ownerUid;
hallVC.guildId = clanInfo.hall.hallId;
[self.navigationController pushViewController:hallVC animated:YES];
}
#pragma mark - XPMineDataGiftTableViewCellDelegate
- (void)xPMineDataGiftTableViewCell:(XPMineDataGiftTableViewCell *)view didClickMore:(UIButton *)sender {
//TODO:
XPMineUserInfoGiftWallViewController * giftWallVC = [[XPMineUserInfoGiftWallViewController alloc] init];
giftWallVC.userUid = self.userUid;
[self.navigationController pushViewController:giftWallVC animated:YES];
}
#pragma mark - XPMineDataSkillCardTableViewCell
@@ -183,15 +212,38 @@
#pragma mark - XPMineUserDataProtocol
- (void)getUserSkillCardListSuccess:(NSArray *)list {
self.skillArray = list;
NSMutableArray<MineSkillCardListInfoModel *> * array = [NSMutableArray arrayWithArray:list];
__block MineSkillCardListInfoModel * voiceCard;
[array enumerateObjectsUsingBlock:^(MineSkillCardListInfoModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if ([obj.cardId isEqualToString:@"8"]) {
voiceCard = obj;
*stop = YES;
}
}];
if (voiceCard) {
[array removeObject:voiceCard];
}
if (self.delegate && [self.delegate respondsToSelector:@selector(xPMineUserDataViewController:didGetVoiceSuccess:)]) {
[self.delegate xPMineUserDataViewController:self didGetVoiceSuccess:voiceCard];
}
self.skillArray = [array copy];
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationNone];
}
- (void)getClanDetailInfoSuccess:(ClanDetailInfoModel *)clanInfo {
self.clanDetailInfo = clanInfo;
- (void)getClanDetailInfoSuccess:(ClanDetailInfoModel *)clanDetailInfo currentUserClanInfo:(ClanDetailInfoModel *)currentUserClanInfo {
self.clanDetailInfo = clanDetailInfo;
if (currentUserClanInfo.clan.elderUid.length <=0 || currentUserClanInfo.hall.ownerUid.length <=0) {
self.isShowEnterClan = YES;
} else {
self.isShowEnterClan = NO;
}
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation:UITableViewRowAnimationNone];
}
- (void)memberApplyHallSuccess {
[self showSuccessToast:@"申请成功,等待管理员审核"];
}
#pragma mark - Getters And Setters
- (void)setUserInfo:(UserInfoModel *)userInfo {
_userInfo = userInfo;

View File

@@ -10,7 +10,7 @@
NS_ASSUME_NONNULL_BEGIN
@interface XPMineUserInfoGiftWallViewController : MvpViewController
@property (nonatomic,copy) NSString *userUid;
@end
NS_ASSUME_NONNULL_END

View File

@@ -6,26 +6,91 @@
//
#import "XPMineUserInfoGiftWallViewController.h"
///Third
#import <Masonry/Masonry.h>
///Tool
#import "ThemeColor.h"
#import "XPMacro.h"
///View
#import "XPMineUserInfoGiftWallCollectionViewCell.h"
#import "XPGuildEmptyCollectionViewCell.h"
///P
#import "XPMineUserInfoGiftWallPresenter.h"
#import "XPMineUserInfoGiftWallProtocol.h"
@interface XPMineUserInfoGiftWallViewController ()
@interface XPMineUserInfoGiftWallViewController ()<UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout, XPMineUserInfoGiftWallProtocol>
///
@property (nonatomic,strong) UICollectionView *collectionView;
@property (nonatomic,strong) NSArray *datasource;
@end
@implementation XPMineUserInfoGiftWallViewController
- (__kindof id)createPresenter {
return [[XPMineUserInfoGiftWallPresenter alloc] init];
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
[self.presenter getUserGiftWall:self.userUid];
[self initSubViews];
[self initSubViewConstraints];
}
#pragma mark - Private Method
- (void)initSubViews {
self.title = @"礼物";
[self.view addSubview:self.collectionView];
}
/*
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
- (void)initSubViewConstraints {
[self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(self.view);
}];
}
*/
#pragma mark - UICollectionViewDelegate And UICollectionViewDatasource
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
return self.datasource.count > 0 ? self.datasource.count : 1;
}
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
return self.datasource.count > 0 ? CGSizeMake(74, 120) : CGSizeMake(KScreenWidth, 500);
}
- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
if (self.datasource.count > 0) {
XPMineUserInfoGiftWallCollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([XPMineUserInfoGiftWallCollectionViewCell class]) forIndexPath:indexPath];
UserGiftWallInfoModel * giftInfo = [self.datasource objectAtIndex:indexPath.row];
cell.giftInfo = giftInfo;
return cell;
}
XPGuildEmptyCollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([XPGuildEmptyCollectionViewCell class]) forIndexPath:indexPath];
return cell;
}
#pragma mark - XPMineUserInfoGiftWallProtocol
- (void)getUserGiftWallSuccess:(NSArray *)giftList {
self.datasource = giftList;
[self.collectionView reloadData];
}
#pragma mark - Getters And Setters
- (UICollectionView *)collectionView{
if (!_collectionView) {
UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
layout.sectionInset = UIEdgeInsetsMake(15, 15, 15, 15);
layout.minimumInteritemSpacing = (CGFloat)(KScreenWidth - 15 * 2 -74* 4 - 5) / 3.0;
layout.minimumLineSpacing = 30;
_collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout];
_collectionView.dataSource = self;
_collectionView.delegate = self;
_collectionView.backgroundColor = [UIColor clearColor];
[_collectionView registerClass:[XPMineUserInfoGiftWallCollectionViewCell class] forCellWithReuseIdentifier:NSStringFromClass([XPMineUserInfoGiftWallCollectionViewCell class])];
[_collectionView registerClass:[XPGuildEmptyCollectionViewCell class] forCellWithReuseIdentifier:NSStringFromClass([XPGuildEmptyCollectionViewCell class])];
}
return _collectionView;
}
@end

View File

@@ -19,11 +19,15 @@
#import "AccountInfoStorage.h"
#import "TTPopup.h"
#import "XPHtmlUrl.h"
#import "XPSkillCardPlayerManager.h"
#import "UIImage+Utils.h"
///Model
#import "MineSkillCardListInfoModel.h"
///View
#import "XPMineUserInfoTableViewCell.h"
#import "XPMineUserInfoHeaderView.h"
#import "XPMineUserInfoCustomNavView.h"
#import "XPMineUserInfoVoiceCardView.h"
///P
#import "XPMineUserInfoPresenter.h"
#import "XPMineUserInfoProtocol.h"
@@ -35,9 +39,9 @@
#import "XPRoomViewController.h"
#import "XPMineUserDataViewController.h"
@interface XPMineUserInfoViewController ()<XPMineCustomNavViewDelegate, XPMineUserInfoProtocol, XPMineUserInfoHeaderViewDelegate, JXCategoryViewDelegate,JXPagerViewDelegate>
@interface XPMineUserInfoViewController ()<XPMineCustomNavViewDelegate, XPMineUserInfoProtocol, XPMineUserInfoHeaderViewDelegate, JXCategoryViewDelegate,JXPagerViewDelegate, XPMineUserDataViewControllerDelegate>
@property (nonatomic, strong) JXCategoryTitleView *titleView;
@property (nonatomic, strong) JXCategoryIndicatorLineView *lineView;
@property (nonatomic, strong) JXCategoryIndicatorImageView *lineView;
@property (nonatomic, strong) JXPagerView *pagingView;
@property (nonatomic, strong) NSArray<NSString *> *titles;
///
@@ -54,6 +58,8 @@
@property (nonatomic,strong) UIButton *attentionButton;
///
@property (nonatomic,strong) XPMineUserDataViewController *userDataVC;
///
@property (nonatomic,strong) XPMineUserInfoVoiceCardView *voiceView;
@end
@implementation XPMineUserInfoViewController
@@ -70,14 +76,19 @@
[super viewDidLoad];
[self initSubViews];
[self initSubViewConstraints];
[self initHttpRequest];
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
if (self.uid > 0) {
NSString * uidStr = [NSString stringWithFormat:@"%ld", self.uid];
[self.presenter getUserInfoWithUid:uidStr];
[self initHttpRequest];
}
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
if (self.voiceView.isPlaying) {
[[XPSkillCardPlayerManager shareInstance] stopMusic];
}
}
@@ -90,6 +101,7 @@
- (void)initSubViews {
[self.view addSubview:self.pagingView];
[self.view addSubview:self.navView];
[self.view addSubview:self.voiceView];
if (self.uid != [AccountInfoStorage instance].getUid.integerValue) {
[self.view addSubview:self.bottomStackView];
[self.bottomStackView addArrangedSubview:self.chatButton];
@@ -108,10 +120,18 @@
make.left.right.top.mas_equalTo(self.view);
make.height.mas_equalTo(kNavigationHeight);
}];
[self.voiceView mas_makeConstraints:^(MASConstraintMaker *make) {
make.right.mas_equalTo(self.view);
make.top.mas_equalTo(self.view.mas_safeAreaLayoutGuideTop).offset(176);
make.size.mas_equalTo(CGSizeMake(65, 25));
}];
}
- (void)initHttpRequest {
NSString *uid = [NSString stringWithFormat:@"%ld", self.uid];
[self.presenter getUserInfoWithUid:uid];
[self.presenter getUserAttentionState:uid];
// 使
@@ -213,6 +233,15 @@
return (id <JXPagerViewListViewDelegate>)viewController;
}
#pragma mark - JXPagerMainTableViewGestureDelegate
- (BOOL)mainTableViewGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
///1000scrollView 1001collectionView
if ( otherGestureRecognizer.view.tag == 1005) {
return NO;
}
return [gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]] && [otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]];
}
#pragma mark - XPMineCustomNavViewDelegate
- (void)xPMineCustomNavView:(XPMineUserInfoCustomNavView *)view didClickEditButton:(UIButton *)sender {
if (sender.isSelected) {///
@@ -241,6 +270,16 @@
[XPRoomViewController openRoom:roomUid viewController:self];
}
#pragma mark - XPMineUserDataViewControllerDelegate
- (void)xPMineUserDataViewController:(XPMineUserDataViewController *)viewController didGetVoiceSuccess:(MineSkillCardListInfoModel *)voiceCard {
if (voiceCard && [voiceCard.cardId isEqualToString:@"8"]) {
self.voiceView.hidden = NO;
self.voiceView.voiceInfo = voiceCard;
} else {
self.voiceView.hidden = YES;
}
}
#pragma mark - XPMineUserInfoProtocol
- (void)onGetUserInfoSuccess:(UserInfoModel *)userInfo {
self.userInfo = userInfo;
@@ -372,9 +411,11 @@
_titleView.listContainer = (id<JXCategoryViewListContainer>)self.pagingView.listContainerView;
JXCategoryIndicatorImageView *lineView = [[JXCategoryIndicatorImageView alloc] init];
lineView.indicatorImageViewSize = CGSizeMake(41, 10);
lineView.verticalMargin = 14;
lineView.indicatorImageView.image = [UIImage imageNamed:@"home_recommend_indicator_room"];
lineView.indicatorImageViewSize = CGSizeMake(16, 6);
lineView.verticalMargin = 7;
lineView.indicatorImageView.layer.masksToBounds = YES;
lineView.indicatorImageView.layer.cornerRadius = 3;
lineView.indicatorImageView.image = [UIImage gradientColorImageFromColors:@[UIColorFromRGB(0xFFC000), UIColorFromRGB(0xFFF9DB)] gradientType:GradientTypeLeftToRight imgSize:CGSizeMake(16, 6)];
_titleView.indicators = @[lineView];
}
return _titleView;
@@ -387,6 +428,7 @@
_pagingView.listContainerView.backgroundColor = [UIColor clearColor];
_pagingView.mainTableView.backgroundColor = [UIColor clearColor];
_pagingView.listContainerView.listCellBackgroundColor = UIColor.clearColor;
_pagingView.mainTableView.gestureDelegate = self;
}
return _pagingView;
}
@@ -401,10 +443,17 @@
- (XPMineUserDataViewController *)userDataVC {
if (!_userDataVC) {
_userDataVC = [[XPMineUserDataViewController alloc] init];
_userDataVC.delegate = self;
}
return _userDataVC;
}
- (XPMineUserInfoVoiceCardView *)voiceView {
if (!_voiceView) {
_voiceView = [[XPMineUserInfoVoiceCardView alloc] init];
_voiceView.hidden = NO;
}
return _voiceView;
}
@end

View File

@@ -26,13 +26,13 @@
///view
@property (nonatomic,strong) UIImageView * coverImageView;
///
@property (nonatomic,strong) UILabel *pageLabel;
@property (nonatomic,strong) UIButton *pageButton;
///
@property (nonatomic,strong) UIImageView *reviewIcon;
///
@property (nonatomic,strong) NSArray *imageUrls;
///
@property (nonatomic,strong) NSMutableArray *userPhtotArray;
@property (nonatomic,strong) NSMutableArray<UserPhoto *> *userPhtotArray;
///
@property (nonatomic,strong) UIView * userInfoView;
///
@@ -97,7 +97,6 @@
- (void)initSubViews {
[self addSubview:self.cycleScrollView];
[self addSubview:self.coverImageView];
[self addSubview:self.pageLabel];
[self addSubview:self.reviewIcon];
[self addSubview:self.userInfoView];
@@ -108,6 +107,7 @@
[self.usershadowImageView addSubview:self.nickStackView];
[self.usershadowImageView addSubview:self.idStackView];
[self.usershadowImageView addSubview:self.tagStackView];
[self.usershadowImageView addSubview:self.pageButton];
[self.nickStackView addArrangedSubview:self.nameLabel];
[self.nickStackView addArrangedSubview:self.sexImageView];
@@ -142,13 +142,6 @@
make.edges.mas_equalTo(self.cycleScrollView);
}];
[self.pageLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.right.mas_equalTo(-15);
make.width.mas_equalTo(35);
make.height.mas_equalTo(16);
make.bottom.mas_equalTo(self.cycleScrollView).offset(-30);
}];
[self.reviewIcon mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.right.mas_equalTo(self);
make.width.mas_equalTo(85);
@@ -166,6 +159,13 @@
make.height.mas_equalTo(146);
}];
[self.pageButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.right.mas_equalTo(-15);
make.width.mas_equalTo(35);
make.height.mas_equalTo(16);
make.bottom.mas_equalTo(self.signBackView.mas_top).offset(-13);
}];
[self.signBackView mas_makeConstraints:^(MASConstraintMaker *make) {
make.height.mas_equalTo(79);
make.left.right.mas_equalTo(self.userInfoView);
@@ -212,19 +212,19 @@
[self.tagStackView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.mas_equalTo(self.usershadowImageView).offset(15);
make.top.mas_equalTo(self.beautifulImageViw.mas_bottom).offset(5);
make.height.mas_equalTo(20);
make.height.mas_equalTo(25);
}];
[self.experImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.height.mas_equalTo(20);
make.width.height.mas_equalTo(25);
}];
[self.charmImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.height.mas_equalTo(20);
make.width.height.mas_equalTo(25);
}];
[self.newUserImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.height.mas_equalTo(15);
make.width.height.mas_equalTo(20);
}];
[self.officalImageView mas_makeConstraints:^(MASConstraintMaker *make) {
@@ -266,7 +266,7 @@
#pragma mark - SDCycleScrollViewDelegate
-(void)cycleScrollView:(SDCycleScrollView *)cycleScrollView didScrollToIndex:(NSInteger)index {
self.pageLabel.text = [NSString stringWithFormat:@"%ld/%lu",(index + 1), (unsigned long)self.imageUrls.count];
[self.pageButton setTitle:[NSString stringWithFormat:@"%ld/%lu",(index + 1), (unsigned long)self.imageUrls.count] forState:UIControlStateNormal];
UserPhoto * photo = [self.userPhtotArray objectAtIndex:index];
self.reviewIcon.hidden = !photo.isReview;
}
@@ -343,9 +343,9 @@
if (imageUrls.count > 0) {
self.imageUrls = imageUrls;
self.cycleScrollView.imageURLStringsGroup = imageUrls;
self.pageLabel.text = [NSString stringWithFormat:@"1/%lu",(unsigned long)imageUrls.count];
[self.pageButton setTitle:[NSString stringWithFormat:@"1/%lu",(unsigned long)imageUrls.count] forState:UIControlStateNormal];;
//
self.reviewIcon.hidden = ![self.userInfo.privatePhoto objectAtIndex:0].isReview;
self.reviewIcon.hidden = ![self.userPhtotArray objectAtIndex:0].isReview;
}
}
}
@@ -420,7 +420,7 @@
if (!_beautifulImageViw) {
_beautifulImageViw = [[UIImageView alloc] init];
_beautifulImageViw.userInteractionEnabled = YES;
_beautifulImageViw.image = [UIImage imageNamed:@""];
_beautifulImageViw.image = [UIImage imageNamed:@"common_icon_beautiful"];
}
return _beautifulImageViw;
}
@@ -476,19 +476,17 @@
return _cycleScrollView;
}
- (UILabel *)pageLabel {
if (!_pageLabel) {
_pageLabel = [[UILabel alloc] init];
_pageLabel.font = [UIFont systemFontOfSize:10];
_pageLabel.textColor = [ThemeColor mainTextColor];
_pageLabel.textAlignment = NSTextAlignmentCenter;
_pageLabel.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.1];
_pageLabel.layer.masksToBounds = YES;
_pageLabel.layer.cornerRadius = 8;
- (UIButton *)pageButton {
if (!_pageButton) {
_pageButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_pageButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
_pageButton.titleLabel.font = [UIFont systemFontOfSize:10];
[_pageButton setBackgroundImage:[UIImage imageNamed:@"mine_user_info_header_page_bg"] forState:UIControlStateNormal];
}
return _pageLabel;
return _pageButton;
}
- (UIImageView *)reviewIcon {
if (!_reviewIcon) {
_reviewIcon = [[UIImageView alloc] init];

View File

@@ -0,0 +1,18 @@
//
// XPMineUserInfoVoiceCardView.h
// xplan-ios
//
// Created by 冯硕 on 2022/4/15.
//
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@class MineSkillCardListInfoModel;
@interface XPMineUserInfoVoiceCardView : UIView
///播放完成
@property (nonatomic,assign, readonly) BOOL isPlaying;
@property (nonatomic,strong) MineSkillCardListInfoModel *voiceInfo;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,160 @@
//
// XPMineUserInfoVoiceCardView.m
// xplan-ios
//
// Created by on 2022/4/15.
//
#import "XPMineUserInfoVoiceCardView.h"
///Third
#import <Masonry/Masonry.h>
#import <AFNetworking.h>
///Tool
#import "UIImage+Utils.h"
#import "UIButton+EnlargeTouchArea.h"
#import "ThemeColor.h"
///Model
#import "MineSkillCardListInfoModel.h"
#import "XPSkillCardPlayerManager.h"
@interface XPMineUserInfoVoiceCardView ()
///
@property (nonatomic,strong) UIImageView *backImaegView;
///
@property (nonatomic,strong) UIButton *playButton;
///
@property (nonatomic,strong) UIImageView *noteImaegView;
///
@property (nonatomic,assign) BOOL isPlaying;
@end
@implementation XPMineUserInfoVoiceCardView
- (void)dealloc {
self.isPlaying = NO;
}
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
[self initSubViews];
[self initSubViewConstraints];
}
return self;
}
#pragma mark - Private Method
- (void)initSubViews {
[self addSubview:self.backImaegView];
[self.backImaegView addSubview:self.playButton];
[self.backImaegView addSubview:self.noteImaegView];
}
- (void)initSubViewConstraints {
[self.backImaegView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.top.bottom.mas_equalTo(self);
make.right.mas_equalTo(self).offset(13);
}];
[self.playButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.size.mas_equalTo(CGSizeMake(15, 15));
make.left.mas_equalTo(self.backImaegView).offset(6);
make.centerY.mas_equalTo(self.backImaegView);
}];
[self.noteImaegView mas_makeConstraints:^(MASConstraintMaker *make) {
make.size.mas_equalTo(CGSizeMake(34, 11));
make.centerY.mas_equalTo(self.backImaegView);
make.left.mas_equalTo(self.playButton.mas_right).offset(7);
}];
}
- (void)playButtonAction:(UIButton *)sender {
sender.selected = !sender.selected;
if (!self.isPlaying) {
if(self.voiceInfo.propVals.count) {
NSString *fileName = [[self.voiceInfo.name componentsSeparatedByString:@"/"] lastObject];
NSString * url = [self.voiceInfo.propVals objectAtIndex:0];
NSString *filePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:@"mineSkillCardVoice"];
NSString *fullPath = [filePath stringByAppendingPathComponent:fileName];
if ([[NSFileManager defaultManager] fileExistsAtPath:fullPath]) {
self.isPlaying = YES;
sender.selected = YES;
[[XPSkillCardPlayerManager shareInstance] playerVoiceWithPath:fullPath completionBlock:^{
self.isPlaying = NO;
sender.selected = NO;
[[XPSkillCardPlayerManager shareInstance] stopMusic];
}];
} else {
if (![[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
NSFileManager *fileMgr = [[NSFileManager alloc] init];
[fileMgr createDirectoryAtPath:filePath withIntermediateDirectories:YES attributes:nil error:nil];
}
[self downloadAudioWithFileName:fileName musicUrl:url completion:^(BOOL isSuccess, NSString *editAudioPath) {
self.isPlaying = YES;
sender.selected = YES;
[[XPSkillCardPlayerManager shareInstance] playerVoiceWithPath:editAudioPath completionBlock:^{
self.isPlaying = NO;
sender.selected = NO;
[[XPSkillCardPlayerManager shareInstance] stopMusic];
}];
}];
}
}
} else {
self.isPlaying = NO;
sender.selected = NO;
[[XPSkillCardPlayerManager shareInstance] stopMusic];
}
}
- (void)downloadAudioWithFileName:(NSString *)fileName musicUrl:(NSString *)musicUrl completion:(void (^) (BOOL isSuccess, NSString *editAudioPath))completion {
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:musicUrl]];
NSURLSessionDownloadTask *download = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {
} destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
NSString *filePath = [[[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:@"mineSkillCardVoice"] stringByAppendingPathComponent:fileName];
return [NSURL fileURLWithPath:filePath];
} completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
if (!error) {
completion(YES, filePath.absoluteString);
} else {
completion(NO, nil);
}
}];
[download resume];
}
#pragma mark - Getters And Setters
- (UIImageView *)backImaegView {
if (!_backImaegView) {
_backImaegView = [[UIImageView alloc] init];
_backImaegView.userInteractionEnabled = YES;
_backImaegView.image = [UIImage gradientColorImageFromColors:@[UIColorFromRGB(0xF8F8F4), UIColorFromRGB(0xE7FBFD)] gradientType:GradientTypeLeftToRight imgSize:CGSizeMake(77, 25)];
_backImaegView.layer.masksToBounds = YES;
_backImaegView.layer.cornerRadius = 25/2;
}
return _backImaegView;
}
- (UIButton *)playButton {
if (!_playButton) {
_playButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_playButton setImage:[UIImage imageNamed:@"mine_user_info_skill_card_voice_play"] forState:UIControlStateNormal];
[_playButton setImage:[UIImage imageNamed:@"mine_user_info_skill_card_voice_pause"] forState:UIControlStateSelected];
[_playButton addTarget:self action:@selector(playButtonAction:) forControlEvents:UIControlEventTouchUpInside];
[_playButton setEnlargeEdgeWithTop:8 right:10 bottom:8 left:10];
}
return _playButton;
}
- (UIImageView *)noteImaegView {
if (!_noteImaegView) {
_noteImaegView = [[UIImageView alloc] init];
_noteImaegView.userInteractionEnabled = YES;
_noteImaegView.image = [UIImage imageNamed:@"mine_user_info_skill_card_voice_note"];
}
return _noteImaegView;
}
@end