// // QXRoomSeatPKView.m // QXLive // // Created by 启星 on 2025/7/2. // #import "QXRoomSeatPKView.h" #import "UIColor+QX.h" #import "QXRoomPKTimeSetView.h" #import "QXTimer.h" #import "QXMineNetwork.h" #import "QXRoomPKResultView.h" #import "QXRoomMessageManager.h" #import "QXAgoraEngineEx.h" #import "QXAgoraEngine.h" #import "QXAlertView.h" @interface QXRoomSeatPKView() @property (nonatomic,strong)UIButton *startBtn; @property (nonatomic,strong)UIButton *endBtn; @property (nonatomic,strong)UIImageView *topImageView; @property (nonatomic,strong)UIButton *pkTimeBtn; @property (nonatomic,strong)UIImageView *leftResult; @property (nonatomic,strong)UIImageView *rightResult; @property (nonatomic,strong)UIImageView *bgImageView; @property (nonatomic,strong)UILabel *titleLabel; @property (nonatomic,strong)QXRoomSeatPKProgress *progressView; @property (nonatomic,strong)QXRoomSeatPKSubView *leftRoomView; @property (nonatomic,strong)QXPKIconView *pkIconView; @property (nonatomic,strong)QXRoomSeatPKSubView *rightRoomView; @property (nonatomic,strong)QXRoomSeatTypeNormalView *leftSeatView; @property (nonatomic,strong)QXRoomSeatTypeNormalView *rightSeatView; @property (nonatomic,strong)QXRoomPKTimeSetView *timeSetView; @property (nonatomic,strong)QXTimer *timer; @property (nonatomic,assign)long startTime; @property (nonatomic,strong)QXRoomPKResultView *resultView; @property (nonatomic,strong)UIButton *muteRemoteBtn; @property (nonatomic,strong)NSString *pk_userId; @property (nonatomic,strong)QXAlertView *alertView; @property (nonatomic,assign)BOOL isDefeat; @end @implementation QXRoomSeatPKView - (instancetype)init { self = [super init]; if (self) { [self initSubviews]; } return self; } -(void)initSubviews{ self.startBtn = [[UIButton alloc] init]; self.startBtn.hidden = YES; self.startBtn.backgroundColor = QXConfig.themeColor; [self.startBtn addRoundedCornersWithRadius:12]; [self.startBtn setTitle:@"开始" forState:(UIControlStateNormal)]; [self.startBtn setTitleColor:QXConfig.btnTextColor forState:(UIControlStateNormal)]; [self.startBtn addTarget:self action:@selector(startAction) forControlEvents:(UIControlEventTouchUpInside)]; self.startBtn.titleLabel.font = [UIFont systemFontOfSize:12]; [self addSubview:self.startBtn]; [self.startBtn mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(7); make.width.mas_equalTo(46); make.height.mas_equalTo(24); make.top.equalTo(self); }]; self.endBtn = [[UIButton alloc] init]; self.endBtn.hidden = YES; self.endBtn.backgroundColor = RGB16(0x333333); [self.endBtn addRoundedCornersWithRadius:12]; [self.endBtn setTitle:@"结束" forState:(UIControlStateNormal)]; [self.endBtn setTitleColor:UIColor.whiteColor forState:(UIControlStateNormal)]; self.endBtn.titleLabel.font = [UIFont systemFontOfSize:12]; [self.endBtn addTarget:self action:@selector(endAction) forControlEvents:(UIControlEventTouchUpInside)]; [self addSubview:self.endBtn]; [self.endBtn mas_makeConstraints:^(MASConstraintMaker *make) { // [make.left.equalTo(self.startBtn.mas_right).offset(10) priorityHigh]; // [make.left.mas_equalTo(7) priorityLow]; make.left.equalTo(self.startBtn.mas_right).offset(10); make.width.mas_equalTo(46); make.height.mas_equalTo(24); make.top.equalTo(self); }]; self.topImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"room_pk_top_bg"]]; [self addSubview:self.topImageView]; [self.topImageView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.startBtn.mas_bottom); make.size.mas_equalTo(CGSizeMake(ScaleWidth(122), ScaleWidth(26))); make.centerX.equalTo(self); }]; self.pkTimeBtn = [[UIButton alloc] init]; [self.pkTimeBtn setTitle:@"未开始" forState:(UIControlStateNormal)]; self.pkTimeBtn.titleLabel.font = [UIFont systemFontOfSize:12]; [self.pkTimeBtn setTitleColor:UIColor.whiteColor forState:(UIControlStateNormal)]; [self addSubview:self.pkTimeBtn]; [self.pkTimeBtn mas_makeConstraints:^(MASConstraintMaker *make) { make.left.right.top.bottom.equalTo(self.topImageView); }]; self.leftResult.hidden = YES; [self addSubview:self.leftResult]; [self.leftResult mas_makeConstraints:^(MASConstraintMaker *make) { make.right.equalTo(self.topImageView.mas_left); make.width.mas_equalTo(ScaleWidth(15)); make.height.mas_equalTo(ScaleWidth(17)); make.centerY.equalTo(self.topImageView); }]; self.rightResult.hidden = YES; [self addSubview:self.rightResult]; [self.rightResult mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self.topImageView.mas_right); make.width.mas_equalTo(ScaleWidth(15)); make.height.mas_equalTo(ScaleWidth(17)); make.centerY.equalTo(self.topImageView); }]; self.leftRoomView = [[QXRoomSeatPKSubView alloc] initWithMyRoom:YES]; [self addSubview:self.leftRoomView]; [self.leftRoomView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self).offset(7); make.width.mas_equalTo((SCREEN_WIDTH-7*2-4)/2); make.bottom.equalTo(self); make.top.equalTo(self.startBtn.mas_bottom).offset(8); }]; self.rightRoomView = [[QXRoomSeatPKSubView alloc] initWithMyRoom:NO]; [self addSubview:self.rightRoomView]; [self.rightRoomView mas_makeConstraints:^(MASConstraintMaker *make) { make.right.equalTo(self).offset(-7); make.width.mas_equalTo((SCREEN_WIDTH-7*2-4)/2); make.bottom.equalTo(self); make.top.equalTo(self.leftRoomView); }]; self.progressView = [[QXRoomSeatPKProgress alloc] init]; [self.progressView addRoundedCornersWithRadius:ScaleWidth(8)]; [self addSubview:self.progressView]; [self.progressView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self.leftRoomView); make.right.equalTo(self.rightRoomView); make.top.equalTo(self.leftRoomView).offset(18); make.height.mas_equalTo(ScaleWidth(16)); }]; self.pkIconView = [[QXPKIconView alloc] init]; [self addSubview:self.pkIconView]; [self.pkIconView mas_makeConstraints:^(MASConstraintMaker *make) { make.size.mas_equalTo(CGSizeMake(ScaleWidth(72), ScaleWidth(72))); make.centerX.centerY.equalTo(self); }]; self.leftSeatView = [[QXRoomSeatTypeNormalView alloc] init]; self.leftSeatView.isPKMyRoom = YES; self.leftSeatView.delegate = self; [self addSubview:self.leftSeatView]; [self.leftSeatView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self).offset(7); make.top.equalTo(self.progressView.mas_bottom); make.bottom.equalTo(self); make.width.mas_equalTo((SCREEN_WIDTH-7*2-4)/2); }]; self.rightSeatView = [[QXRoomSeatTypeNormalView alloc] init]; self.rightSeatView.isPKOtherRoom = YES; self.rightSeatView.delegate = self; [self addSubview:self.rightSeatView]; [self.rightSeatView mas_makeConstraints:^(MASConstraintMaker *make) { make.right.equalTo(self).offset(-7); make.top.equalTo(self.progressView.mas_bottom); make.bottom.equalTo(self); make.width.mas_equalTo((SCREEN_WIDTH-7*2-4)/2); }]; self.muteRemoteBtn = [[UIButton alloc] init]; [self.muteRemoteBtn setImage:[UIImage imageNamed:@"room_event_mute_audio_sel"] forState:(UIControlStateNormal)]; [self.muteRemoteBtn setImage:[UIImage imageNamed:@"room_event_mute_audio_nor"] forState:(UIControlStateSelected)]; [self.muteRemoteBtn addTarget:self action:@selector(muteRemoteAction:) forControlEvents:(UIControlEventTouchUpInside)]; self.muteRemoteBtn.hidden = YES; [self addSubview:self.muteRemoteBtn]; [self.muteRemoteBtn mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(self.rightRoomView).offset(20+ScaleWidth(50)); make.top.equalTo(self.progressView.mas_bottom); make.size.mas_equalTo(CGSizeMake(30, 30)); }]; } -(void)setRoomModel:(QXRoomModel *)roomModel{ _roomModel = roomModel; [self.progressView setLeftProgressWithLeftValue:self.roomModel.pk_info.my_room_value rightValue:self.roomModel.pk_info.pk_room_value]; NSTimeInterval timeInterval = [[NSDate date] timeIntervalSince1970]; long long milliseconds = (long long)(timeInterval); self.startTime = self.roomModel.pk_info.pk_end_times.longLongValue - milliseconds; [self startTimerWithPart:roomModel.pk_info.pk_part];; self.leftSeatView.roomModel = roomModel; [self configBtn]; if (roomModel.pk_info.my_room_value.longLongValue > roomModel.pk_info.pk_room_value.longLongValue) { self.leftResult.image = [UIImage imageNamed:@"room_pk_victory"]; self.rightResult.image = [UIImage imageNamed:@"room_pk_defeated"]; }else if (roomModel.pk_info.my_room_value.longLongValue < roomModel.pk_info.pk_room_value.longLongValue) { // 失败 self.resultView.type = QXRoomPKResulttTypeDefeated; self.leftResult.image = [UIImage imageNamed:@"room_pk_defeated"]; }else{ self.leftResult.image = [UIImage imageNamed:@"room_pk_tie"]; self.rightResult.image = [UIImage imageNamed:@"room_pk_tie"]; } } -(void)configBtn{ if (self.roomModel.pk_info.pk_part.intValue == 2) { if ([self.roomModel.pk_info.invite_pk_user_id isEqualToString:QXGlobal.shareGlobal.loginModel.user_id] && self.leftSeatView.myPitNumber == 9) { self.startBtn.hidden = NO; }else{ self.startBtn.hidden = YES; } if (self.leftSeatView.myPitNumber == 9) { self.endBtn.hidden = NO; }else{ self.endBtn.hidden = YES; } }else if (self.roomModel.pk_info.pk_part.intValue == 3) { if (self.leftSeatView.myPitNumber == 9) { self.endBtn.hidden = NO; }else{ self.endBtn.hidden = YES; } self.startBtn.hidden = YES; }else if (self.roomModel.pk_info.pk_part.intValue == 4) { if (self.leftSeatView.myPitNumber == 9) { self.endBtn.hidden = NO; }else{ self.endBtn.hidden = YES; } self.startBtn.hidden = YES; } if (self.leftSeatView.myPitNumber == 9) { self.muteRemoteBtn.hidden = NO; }else{ self.muteRemoteBtn.hidden = YES; } } -(void)setPkRoomModel:(QXRoomModel *)pkRoomModel{ _pkRoomModel = pkRoomModel; for (QXRoomPitModel*model in pkRoomModel.room_info.pit_list) { if (model.pit_number.intValue == 9) { self.pk_userId = model.user_id; break; } } self.rightSeatView.roomModel = pkRoomModel; } -(void)setMyPitNumber:(NSInteger)myPitNumber{ _myPitNumber = myPitNumber; self.leftSeatView.myPitNumber = myPitNumber; } -(void)didUpDownSeatWithUser:(QXUserHomeModel *)user isUpSeat:(BOOL)isUpSeat pit_number:(NSInteger)pit_number{ if ([user.user_id isEqualToString:[QXGlobal shareGlobal].loginModel.user_id]) { if (isUpSeat) { self.myPitNumber = pit_number; if (self.myPitNumber == 9) { self.muteRemoteBtn.hidden = NO; } }else{ self.myPitNumber = -1; self.muteRemoteBtn.hidden = YES; } } [self.leftSeatView didUpDownSeatWithUser:user isUpSeat:isUpSeat pit_number:pit_number]; } -(void)roomSeatExchangedWithFromPitNumber:(NSInteger)fromPitNumber toPitNumber:(NSInteger)toPitNumber{ [self.leftSeatView roomSeatExchangedWithFromPitNumber:fromPitNumber toPitNumber:toPitNumber]; } -(void)roomUserInfoDidChanged:(QXUserHomeModel *)user{ [self.leftSeatView roomUserInfoDidChanged:user]; } -(void)clearCharm{ [self.leftSeatView clearCharm]; } -(void)roomClearUserCharmWithUserId:(NSString *)userId{ [self.leftSeatView roomClearUserCharmWithUserId:userId]; } -(void)setSeatIsLock:(NSString *)isLock pitNumber:(NSString *)pitNumber{ [self.leftSeatView setSeatIsLock:isLock pitNumber:pitNumber]; } -(void)setSeatCharmWithUser:(QXUserHomeModel *)model{ [self.leftSeatView setSeatCharmWithUser:model]; } -(void)startAction{ self.timeSetView.pkId = self.roomModel.pk_info.pk_id; [self.timeSetView showInView:self.viewController.view]; } -(void)endAction{ MJWeakSelf if (self.roomModel.pk_info.pk_part.intValue == 4 && self.isDefeat) { self.alertView.message = @"惩罚阶段结束PK需对方主持同意,是否发起结束"; }else{ self.alertView.message = @"是否提前结束本场PK"; } self.alertView.commitBlock = ^{ [QXMineNetwork roomPkEndWithPk_id:weakSelf.roomModel.pk_info.pk_id type:@"3" user_id:[QXGlobal shareGlobal].loginModel.user_id successBlock:^(NSDictionary * _Nonnull dict) { } failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) { showToast(msg); }]; }; [[QXGlobal shareGlobal] showView:self.alertView controller:self.viewController.navigationController popType:(PopViewTypePopFromCenter) tapDismiss:NO finishBlock:^{ }]; } -(void)muteRemoteAction:(UIButton*)sender{ // [[QXAgoraEngineEx sharedEngine] muteRemoteEXAudioStream:sender.selected]; // return; sender.selected = !sender.selected; NSDictionary *dict = @{ @"is_mute":[NSNumber numberWithInteger:sender.selected?1:0], }; NSString *jsonStr = [dict jsonStringEncoded]; [[QXRoomMessageManager shared] sendC2CMessage:jsonStr messageType:QXRoomMessageTypeMuteRemoteAudio userId:self.pk_userId]; [[QXAgoraEngineEx sharedEngine] muteRemoteEXAudioStream:sender.selected]; } -(void)didClickUserHeaderWithPitModel:(QXRoomPitModel *)pitModel userModel:(id)userModel isPkRoom:(BOOL)isPkRoom pkRoomId:(NSString *)pkRoomId isNoTakeOff:(BOOL)isNoTakeOff{ if (self.delegate && [self.delegate respondsToSelector:@selector(didClickUserHeaderWithPitModel:userModel:isPkRoom:pkRoomId:isNoTakeOff:)]) { [self.delegate didClickUserHeaderWithPitModel:pitModel userModel:nil isPkRoom:isPkRoom pkRoomId:pkRoomId isNoTakeOff:isNoTakeOff]; } } -(void)didHugSeatWithPitNumber:(NSString *)pitNumber{ if (self.delegate && [self.delegate respondsToSelector:@selector(didHugSeatWithPitNumber:)]) { [self.delegate didHugSeatWithPitNumber:pitNumber]; } } -(void)pkStartWithPkEndTimes:(NSString *)pk_end_times pk_id:(nonnull NSString *)pk_id{ self.roomModel.pk_info.pk_id = pk_id; self.roomModel.pk_info.pk_part = @"3"; // [self.pkTimeBtn setTitle:@"未开始" forState:(UIControlStateNormal)]; NSTimeInterval timeInterval = [[NSDate date] timeIntervalSince1970]; long long milliseconds = (long long)(timeInterval); self.startTime = pk_end_times.longLongValue - milliseconds; [self startTimerWithPart:@"3"]; [self configBtn]; } -(void)roomPKValueDidChangedWithRoomIdA:(NSString *)room_id_a create_value_a:(NSString *)create_value_a room_id_b:(NSString *)room_id_b receive_value_b:(NSString *)receive_value_b{ if ([room_id_a isEqualToString:self.roomModel.room_info.room_id]) { self.roomModel.pk_info.my_room_value = create_value_a; self.roomModel.pk_info.pk_room_value = receive_value_b; [self.progressView setLeftProgressWithLeftValue:self.roomModel.pk_info.my_room_value rightValue:self.roomModel.pk_info.pk_room_value]; }else{ self.roomModel.pk_info.my_room_value = receive_value_b; self.roomModel.pk_info.pk_room_value = create_value_a; [self.progressView setLeftProgressWithLeftValue:self.roomModel.pk_info.my_room_value rightValue:self.roomModel.pk_info.pk_room_value]; } } /// pk结果 -(void)pkResultWithIsVictory:(NSInteger)isVictory end_time:(NSString*)end_time victory_name:(NSString*)victory_name victory_cover:(NSString*)victory_cover defeated_name:(NSString*)defeated_name defeated_cover:(NSString*)defeated_cover{ self.leftResult.hidden = NO; self.rightResult.hidden = NO; if (isVictory == 1) { // 胜利 self.resultView.type = QXRoomPKResulttTypeVictory; self.leftResult.image = [UIImage imageNamed:@"room_pk_victory"]; self.rightResult.image = [UIImage imageNamed:@"room_pk_defeated"]; }else if (isVictory == 0){ // 失败 self.resultView.type = QXRoomPKResulttTypeDefeated; self.leftResult.image = [UIImage imageNamed:@"room_pk_defeated"]; self.rightResult.image = [UIImage imageNamed:@"room_pk_victory"]; self.isDefeat = YES; }else{ self.leftResult.image = [UIImage imageNamed:@"room_pk_tie"]; self.rightResult.image = [UIImage imageNamed:@"room_pk_tie"]; self.resultView.type = QXRoomPKResulttTypeTie; } [self.resultView setResultWithVictory_name:victory_name victory_cover:victory_cover defeated_name:defeated_name defeated_cover:defeated_cover]; [self.resultView showInView:self.viewController.view]; self.roomModel.pk_info.pk_part = @"4"; self.roomModel.pk_info.pk_end_times = end_time; NSTimeInterval timeInterval = [[NSDate date] timeIntervalSince1970]; long long milliseconds = (long long)(timeInterval); self.startTime = end_time.longLongValue - milliseconds; [self startTimerWithPart:@"4"]; } -(void)startTimerWithPart:(NSString*)part{ __block NSString *str = @""; if (part.intValue == 2) { str = @"等待开始"; }else if (part.intValue == 3){ str = @"进行中"; }else if (part.intValue == 4){ str = @"惩罚时间"; } if (_timer) { [_timer invalidate]; _timer = nil; } MJWeakSelf _timer = [QXTimer scheduledTimerWithTimeInterval:1 repeats:YES queue:dispatch_get_main_queue() block:^{ weakSelf.startTime--; if (weakSelf.startTime <= 0) { [weakSelf endTimer]; }else{ [self.pkTimeBtn setTitle:[NSString stringWithFormat:@"%@ %02ld:%02ld",str,weakSelf.startTime/60,weakSelf.startTime%60] forState:(UIControlStateNormal)]; } }]; } -(void)endTimer{ if (_timer) { [self->_timer invalidate]; self->_timer = nil; [self.pkTimeBtn setTitle:@"00:00" forState:(UIControlStateNormal)]; } } -(void)destroyViews{ [self.leftSeatView destroyViews]; [self.rightSeatView destroyViews]; } -(QXRoomPKTimeSetView *)timeSetView{ if (!_timeSetView) { _timeSetView = [[QXRoomPKTimeSetView alloc] init]; } return _timeSetView; } -(QXRoomPKResultView *)resultView{ if (!_resultView ) { _resultView = [[QXRoomPKResultView alloc] initWithType:(QXRoomPKResulttTypeTie)]; } return _resultView; } -(UIImageView *)leftResult{ if (!_leftResult) { _leftResult = [[UIImageView alloc] init]; } return _leftResult; } -(UIImageView *)rightResult{ if (!_rightResult) { _rightResult = [[UIImageView alloc] init]; } return _rightResult; } -(QXAlertView *)alertView{ if (!_alertView) { _alertView = [[QXAlertView alloc] initWithFrame:CGRectMake(0, 0, ScaleWidth(300), ScaleWidth(175))]; } return _alertView; } @end @implementation QXPKIconView - (instancetype)init { self = [super init]; if (self) { [self initSubviews]; } return self; } -(void)initSubviews{ self.pkImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"room_pk_icon"]]; [self addSubview:self.pkImageView]; [self.pkImageView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.bottom.right.left.equalTo(self); }]; } -(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{ UIView *hitView= [super hitTest:point withEvent:event]; if (hitView== self) { return nil; } else { return hitView; } } @end @implementation QXRoomSeatPKSubView -(instancetype)initWithMyRoom:(BOOL)isMyRoom{ if (self = [super init]) { _isMyRoom = isMyRoom; [self initSubviews]; } return self; } -(void)initSubviews{ self.bgImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:self.isMyRoom?@"room_pk_left_bg":@"room_pk_right_bg"]]; self.bgImageView.contentMode = UIViewContentModeScaleToFill; [self addSubview:self.bgImageView]; [self.bgImageView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.bottom.left.right.equalTo(self); }]; self.titleLabel = [[UILabel alloc] init]; self.titleLabel.font = [UIFont systemFontOfSize:12]; self.titleLabel.textColor = UIColor.whiteColor; [self addSubview:self.titleLabel]; if (self.isMyRoom) { self.titleLabel.text = @"我方"; [self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self).offset(6); make.top.equalTo(self).offset(2); }]; }else{ self.titleLabel.text = @"对方"; [self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.right.equalTo(self).offset(-6); make.top.equalTo(self).offset(2); }]; } } @end @implementation QXRoomSeatPKProgress - (instancetype)init { self = [super init]; if (self) { [self initSubviews]; } return self; } -(void)initSubviews{ self.leftView = [[UIView alloc] init]; self.leftView.backgroundColor = [UIColor sh_getColorOfPercent:0.5 between:RGB16(0x72C1F8) and:RGB16(0x6785F6)]; [self addSubview:self.leftView]; [self.leftView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self); make.top.bottom.equalTo(self); make.width.equalTo(self.mas_width).multipliedBy(0.5); }]; self.rightView = [[UIView alloc] init]; self.rightView.backgroundColor = [UIColor sh_getColorOfPercent:0.5 between:RGB16(0x3F1D71) and:RGB16(0x3F1D73)]; [self addSubview:self.rightView]; [self.rightView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self.leftView.mas_right); make.top.bottom.equalTo(self); make.right.equalTo(self); }]; self.leftTitleLabel = [[UILabel alloc] init]; self.leftTitleLabel.font = [UIFont systemFontOfSize:12]; self.leftTitleLabel.textColor = UIColor.whiteColor; self.leftTitleLabel.text = @"0"; [self addSubview:self.leftTitleLabel]; [self.leftTitleLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self).offset(6); make.top.bottom.equalTo(self); }]; self.rightTitleLabel = [[UILabel alloc] init]; self.rightTitleLabel.font = [UIFont systemFontOfSize:12]; self.rightTitleLabel.textColor = UIColor.whiteColor; self.rightTitleLabel.text = @"0"; [self addSubview:self.rightTitleLabel]; [self.rightTitleLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.right.equalTo(self).offset(-6); make.top.bottom.equalTo(self); }]; } -(void)setLeftProgressWithLeftValue:(NSString *)leftValue rightValue:(NSString *)rightValue{ self.leftTitleLabel.text = leftValue; self.rightTitleLabel.text = rightValue; if (leftValue.longLongValue==0 && rightValue.longLongValue==0) { return; } CGFloat ratio = (double)leftValue.longLongValue/(leftValue.longLongValue + rightValue.longLongValue); [UIView animateWithDuration:0.2 animations:^{ [self.leftView mas_remakeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self); make.top.bottom.equalTo(self); make.width.equalTo(self.mas_width).multipliedBy(ratio); }]; }]; } @end