You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

284 lines
9.8 KiB

//
// HomeTableViewCell.m
// LekangGuard
//
// Created by ecell on 2022/10/14.
//
#import "HomeTableViewCell.h"
@interface NSTimer (XRTimer)
+ (NSTimer *)xr_timerWithTimeInterval:(NSTimeInterval)interval repeats:(BOOL)repeats block:(void (^)(NSTimer *))block;
@end
@implementation NSTimer (XRTimer)
+ (NSTimer *)xr_timerWithTimeInterval:(NSTimeInterval)interval repeats:(BOOL)repeats block:(void (^)(NSTimer *))block {
if ([self respondsToSelector:@selector(timerWithTimeInterval:repeats:block:)]) {
return [self timerWithTimeInterval:interval repeats:repeats block:block];
}
return [self timerWithTimeInterval:interval target:self selector:@selector(timerAction:) userInfo:block repeats:repeats];
}
+ (void)timerAction:(NSTimer *)timer {
void (^block)(NSTimer *timer) = timer.userInfo;
if (block) block(timer);
}
@end
//倒计时时间
#define DefineCountdownTime 60
@interface HomeTableViewCell ()
/// 背景图片
@property (nonatomic ,weak) UIImageView *bgimg;
/// 标题
@property (nonatomic ,weak) UILabel *titleLabel;
/// 时间
@property (nonatomic ,weak) UILabel *timeLabel;
/// 右边 fed0df
@property (nonatomic ,weak) UIButton *rightBtn;
/// 温度或者心率
@property (nonatomic ,weak) UILabel *commLabel;
@property (nonatomic ,weak) UILabel *tiLabel;
///定时器
@property (nonatomic, strong) NSTimer *timer;
@end
@implementation HomeTableViewCell
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self)
{
self.selectionStyle = UITableViewCellSelectionStyleNone;
self.backgroundColor = KKClearColor;
[self subCellView];
}
return self;
}
- (void)setTitleStr:(NSString *)titleStr
{
_titleStr = titleStr;
self.titleLabel.text = titleStr;
if ([titleStr isEqualToString:GJText(@"心率")])
{
self.bgimg.image = ImageName_(@"img_heart_rate_bg");
self.rightBtn.layer.borderColor = RGB(254, 74, 102).CGColor;
[self.rightBtn setTitleColor:RGB(254, 74, 102) forState:0];
}
if ([titleStr isEqualToString:GJText(@"体温")])
{
self.bgimg.image = ImageName_(@"img_body_temperature_bg");
self.rightBtn.layer.borderColor = KKMainColor.CGColor;
[self.rightBtn setTitleColor:KKMainColor forState:0];
}
}
- (void)setLaLoModel:(LatestLocationModel *)laLoModel
{
_laLoModel = laLoModel;
if ([self.titleLabel.text isEqualToString:GJText(@"心率")])
{
self.commLabel.text = STRINGHASVALUE(laLoModel.rate) ? laLoModel.rate : @"--";
self.timeLabel.text = laLoModel.rateTime;
self.tiLabel.text = GJText(@"次/分");
}
if ([self.titleLabel.text isEqualToString:GJText(@"体温")])
{
self.commLabel.text = STRINGHASVALUE(laLoModel.temperature) ? laLoModel.temperature : @"--";
self.timeLabel.text = laLoModel.temperatureTime;
self.tiLabel.text = @"";
}
}
- (void)subCellView
{
UIImageView *bgimg = [UICommon ui_imageView:CGRectZero fileName:@""];
self.bgimg = bgimg;
[self.contentView addSubview:bgimg];
[bgimg mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.equalTo(self.contentView).inset(10);
make.top.equalTo(self.contentView);
make.bottom.equalTo(self.contentView.mas_bottom).inset(10);
}];
/// 标题
UILabel *titleLabel = [UICommon ui_label:CGRectZero lines:0 align:NSTextAlignmentLeft font:FontADA_(11) textColor:KKGrey121 text:@"--" Radius:0];
self.titleLabel = titleLabel;
[self.contentView addSubview:titleLabel];
[titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(bgimg).offset(30);
make.top.equalTo(bgimg).offset(Adapted(20));
}];
/// 时间
UILabel *timeLabel = [UICommon ui_label:CGRectZero lines:0 align:NSTextAlignmentLeft font:FontADA_(10) textColor:KKGrey143 text:@"--" Radius:0];
self.timeLabel = timeLabel;
[self.contentView addSubview:timeLabel];
[timeLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(titleLabel.mas_right).offset(10);
make.centerY.equalTo(titleLabel);
}];
/// 右边 fed0df
UIButton *rightBtn = [UICommon ui_buttonSimple:CGRectZero font:FontADA_(12) normalColor:KKMainColor normalText:GJText(@"开始测量") click:^(UIButton *btn){
kWeakSelf(self)
NSLog(@"%@",self.titleLabel.text);
@try {
[HeartAndTempModel postHeartAndTempDataWithType:[self.titleLabel.text isEqualToString:GJText(@"心率")] ? 1 : 2 cmd:2 obj:@"-1" success:^(id responseObject) {
NSString * tempKey;
if([self.titleLabel.text isEqualToString:GJText(@"心率")])
{
//心率
tempKey = [NSString stringWithFormat:@"%@&%@",HeartMeasurementTimeKey,APIManager.sharedManager.deviceModel.imei];
}else{
//体温
tempKey = [NSString stringWithFormat:@"%@&%@",TempMeasurementTimeKey,APIManager.sharedManager.deviceModel.imei];
}
//设置 倒计时时间后的 时间戳
[UserDefaults setValue:[NSDate dateWithTimeIntervalSince1970:([NSDate date].timeIntervalSince1970 + DefineCountdownTime)] forKey:tempKey];
//先调用一次
[weakself calculateFun];
[weakself startTimer];
} failure:^(NSError * _Nonnull error) {
}];
} @catch (NSException *exception) {
} @finally {
}
}];
rightBtn.layer.borderWidth = 1;
rightBtn.layer.borderColor = KKMainColor.CGColor;
rightBtn.layer.cornerRadius = Adapted(15);
self.rightBtn = rightBtn;
[self.contentView addSubview:rightBtn];
CGRect titlesize = [UICommon GetTextWidth:rightBtn.currentTitle ViewHeight:Adapted(30) fontSize:FontADA_(12) type:@"w"];
[rightBtn mas_makeConstraints:^(MASConstraintMaker *make) {
make.right.equalTo(bgimg.mas_right).inset(20);
make.centerY.equalTo(bgimg);
make.size.mas_equalTo(CGSizeMake(Adapted(titlesize.size.width+20), Adapted(30)));
}];
/// 温度或心率
UILabel *commLabel = [UICommon ui_label:CGRectZero lines:0 align:NSTextAlignmentLeft font:FontBoldADA_(18) textColor:KKGrey121 text:@"--" Radius:0];
self.commLabel = commLabel;
[self.contentView addSubview:commLabel];
[commLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(titleLabel.mas_left);
make.bottom.equalTo(bgimg.mas_bottom).inset(Adapted(20));
}];
UILabel *tiLabel = [UICommon ui_label:CGRectZero lines:0 align:NSTextAlignmentLeft font:FontADA_(11) textColor:KKGrey121 text:@"" Radius:0];
self.tiLabel = tiLabel;
[self.contentView addSubview:tiLabel];
[tiLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(commLabel.mas_right).offset(5);
make.bottom.equalTo(commLabel.mas_bottom);
}];
}
#pragma mark- --------定时器相关方法--------
- (void)startTimer
{
//如果定时器已开启,先停止再重新开启
if (self.timer) [self stopTimer];
__weak typeof(self) weakSelf = self;
self.timer = [NSTimer xr_timerWithTimeInterval:1 repeats:YES block:^(NSTimer * _Nonnull timer) {
[weakSelf calculateFun];
}];
[[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
}
- (void)stopTimer
{
[self.timer invalidate];
self.timer = nil;
}
/// 倒计时计算方法
- (void)calculateFun
{
NSString *tempKey;
if([self.titleLabel.text isEqualToString:GJText(@"心率")])
{
//心率
tempKey = [NSString stringWithFormat:@"%@&%@",HeartMeasurementTimeKey,APIManager.sharedManager.deviceModel.imei];
}
else
{
//体温
tempKey = [NSString stringWithFormat:@"%@&%@",TempMeasurementTimeKey,APIManager.sharedManager.deviceModel.imei];
}
NSDate *tempDate = [UserDefaults valueForKey:tempKey];
if(tempDate)
{
NSTimeInterval tempTime = tempDate.timeIntervalSince1970;
if ( (tempTime - [NSDate date].timeIntervalSince1970) < 1 )
{
[UserDefaults removeObjectForKey:tempKey];
[self stopTimer];
[self.rightBtn setTitle:GJText(@"开始测量") forState:0];
//MARK: 这里倒计时结束时需要回调刷新页面的数据
// if(self.measurementEndBlock)
// {
// self.measurementEndBlock();
// }
}
else
{
[UserDefaults setValue:[NSDate dateWithTimeIntervalSince1970:tempTime] forKey:tempKey];
[self.rightBtn setTitle:[NSString stringWithFormat:GJText(@"测量中(%ds)"),(int)(tempTime - [NSDate date].timeIntervalSince1970)] forState:0];
}
}
else
{
[self stopTimer];
[self.rightBtn setTitle:GJText(@"开始测量") forState:0];
//MARK: 这里倒计时结束时需要回调刷新页面的数据
// if(self.measurementEndBlock)
// {
// self.measurementEndBlock();
// }
}
CGRect titlesize = [UICommon GetTextWidth:self.rightBtn.currentTitle ViewHeight:Adapted(30) fontSize:FontADA_(12) type:@"w"];
[self.rightBtn mas_remakeConstraints:^(MASConstraintMaker *make) {
make.right.equalTo(self.bgimg.mas_right).inset(20);
make.centerY.equalTo(self.bgimg);
make.size.mas_equalTo(CGSizeMake(Adapted(titlesize.size.width+20), Adapted(30)));
}];
}
- (void)awakeFromNib {
[super awakeFromNib];
// Initialization code
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
// Configure the view for the selected state
}
@end