201 lines
7.3 KiB
Objective-C
201 lines
7.3 KiB
Objective-C
//
|
||
// QXAppVersionView.m
|
||
// QXLive
|
||
//
|
||
// Created by 启星 on 2025/9/27.
|
||
//
|
||
|
||
#import "QXAppVersionView.h"
|
||
#import "QXMineNetwork.h"
|
||
|
||
@interface QXAppVersionView()<UITextFieldDelegate>
|
||
@property (nonatomic,strong)UIView *bgView;
|
||
@property (nonatomic,strong)UILabel *titleLabel;
|
||
@property (nonatomic,strong)UILabel *messageLabel;
|
||
@property (nonatomic,strong)UIButton *cancelBtn;
|
||
@property (nonatomic,strong)UIButton *commitBtn;
|
||
@end
|
||
|
||
@implementation QXAppVersionView
|
||
|
||
- (instancetype)initWithFrame:(CGRect)frame
|
||
{
|
||
self = [super initWithFrame:frame];
|
||
if (self) {
|
||
self.frame = CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
|
||
[self createViews];
|
||
}
|
||
return self;
|
||
}
|
||
-(void)createViews{
|
||
self.backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.5];
|
||
self.bgView = [[UIView alloc] initWithFrame:CGRectMake((SCREEN_WIDTH-ScaleWidth(275))/2.0, -self.height, ScaleWidth(275), ScaleWidth(400))];
|
||
self.bgView.backgroundColor = [UIColor whiteColor];
|
||
[self.bgView addRoundedCornersWithRadius:16];
|
||
[self addSubview:self.bgView];
|
||
|
||
|
||
|
||
self.titleLabel = [[UILabel alloc] init];
|
||
self.titleLabel.font = [UIFont boldSystemFontOfSize:16];
|
||
self.titleLabel.text = QXText(@"发现新版本");
|
||
self.titleLabel.textColor = RGB16(0x333333);
|
||
[self.bgView addSubview:self.titleLabel];
|
||
[self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||
make.centerX.equalTo(self.bgView);
|
||
make.top.equalTo(self.bgView).offset(16);
|
||
make.height.mas_equalTo(24);
|
||
}];
|
||
|
||
self.commitBtn = [[UIButton alloc] init];
|
||
[self.commitBtn addRoundedCornersWithRadius:21];
|
||
self.commitBtn.backgroundColor = QXConfig.themeColor;
|
||
[self.commitBtn setTitle:QXText(@"确认") forState:(UIControlStateNormal)];
|
||
[self.commitBtn setTitleColor:QXConfig.btnTextColor forState:(UIControlStateNormal)];
|
||
self.commitBtn.titleLabel.font = [UIFont systemFontOfSize:14];
|
||
[self.commitBtn addTarget:self action:@selector(commitAction) forControlEvents:(UIControlEventTouchUpInside)];
|
||
[self.bgView addSubview:self.commitBtn];
|
||
[self.commitBtn mas_makeConstraints:^(MASConstraintMaker *make) {
|
||
make.bottom.equalTo(self.bgView).offset(-12);
|
||
make.height.mas_equalTo(42);
|
||
make.width.mas_equalTo(ScaleWidth(110));
|
||
make.right.mas_equalTo(-20);
|
||
}];
|
||
|
||
|
||
self.cancelBtn = [[UIButton alloc] init];
|
||
[self.cancelBtn addRoundedCornersWithRadius:21];
|
||
self.cancelBtn.backgroundColor = RGB16(0xF3F3F3);
|
||
[self.cancelBtn setTitle:QXText(@"取消") forState:(UIControlStateNormal)];
|
||
[self.cancelBtn setTitleColor:RGB16(0x999999) forState:(UIControlStateNormal)];
|
||
self.cancelBtn.titleLabel.font = [UIFont systemFontOfSize:14];
|
||
[self.cancelBtn addTarget:self action:@selector(cancelAction) forControlEvents:(UIControlEventTouchUpInside)];
|
||
[self.bgView addSubview:self.cancelBtn];
|
||
[self.cancelBtn mas_makeConstraints:^(MASConstraintMaker *make) {
|
||
make.bottom.equalTo(self.bgView).offset(-12);
|
||
make.height.mas_equalTo(42);
|
||
make.width.mas_equalTo(ScaleWidth(110));
|
||
make.left.mas_equalTo(20);
|
||
}];
|
||
|
||
self.messageLabel = [[UILabel alloc] init];
|
||
self.messageLabel.font = [UIFont boldSystemFontOfSize:16];
|
||
self.messageLabel.textColor = RGB16(0x000000);
|
||
self.messageLabel.textAlignment = NSTextAlignmentCenter;
|
||
self.messageLabel.numberOfLines = 0;
|
||
[self.bgView addSubview:self.messageLabel];
|
||
[self.messageLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||
make.top.equalTo(self.titleLabel.mas_bottom).offset(10);
|
||
make.left.equalTo(self.bgView).offset(16);
|
||
make.right.equalTo(self.bgView).offset(-16);
|
||
make.bottom.equalTo(self.commitBtn.mas_top).offset(-10);
|
||
}];
|
||
|
||
}
|
||
-(void)setModel:(QXAppVersionModel *)model{
|
||
_model = model;
|
||
self.messageLabel.text = model.content;
|
||
if (model.is_force.intValue == 1) {
|
||
self.cancelBtn.hidden = YES;
|
||
[self.commitBtn mas_remakeConstraints:^(MASConstraintMaker *make) {
|
||
make.bottom.equalTo(self.bgView).offset(-12);
|
||
make.height.mas_equalTo(42);
|
||
make.width.mas_equalTo(ScaleWidth(110));
|
||
make.centerX.equalTo(self.bgView);
|
||
}];
|
||
}else{
|
||
self.cancelBtn.hidden = NO;
|
||
[self.commitBtn mas_remakeConstraints:^(MASConstraintMaker *make) {
|
||
make.bottom.equalTo(self.bgView).offset(-12);
|
||
make.height.mas_equalTo(42);
|
||
make.width.mas_equalTo(ScaleWidth(110));
|
||
make.right.mas_equalTo(-20);
|
||
}];
|
||
}
|
||
}
|
||
-(void)cancelAction{
|
||
[self hide];
|
||
}
|
||
-(void)commitAction{
|
||
if ([self.model.url isExist]) {
|
||
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:self.model.url] options:@{} completionHandler:nil];
|
||
}
|
||
}
|
||
|
||
-(void)showInView:(UIView *)view{
|
||
[view addSubview:self];
|
||
[UIView animateWithDuration:0.3 delay:0 usingSpringWithDamping:0.5 initialSpringVelocity:1.0 options:UIViewAnimationOptionCurveEaseInOut animations:^{
|
||
self.bgView.y = (SCREEN_HEIGHT-ScaleWidth(300))/2.0;
|
||
} completion:^(BOOL finished) {
|
||
|
||
}];
|
||
}
|
||
|
||
-(void)hide{
|
||
[UIView animateWithDuration:0.3 delay:0 usingSpringWithDamping:0.5 initialSpringVelocity:1.0 options:UIViewAnimationOptionCurveEaseInOut animations:^{
|
||
self.bgView.y = SCREEN_HEIGHT;
|
||
} completion:^(BOOL finished) {
|
||
[self removeFromSuperview];
|
||
}];
|
||
}
|
||
|
||
@end
|
||
|
||
|
||
@implementation QXVersionComparator
|
||
|
||
+ (NSInteger)compareVersion:(NSString *)newVersion withOldVersion:(NSString *)oldVersion {
|
||
// 处理空值情况
|
||
if (!newVersion || !oldVersion) {
|
||
return 0;
|
||
}
|
||
|
||
// 去除可能的前缀(如"v")
|
||
newVersion = [self removeVersionPrefix:newVersion];
|
||
oldVersion = [self removeVersionPrefix:oldVersion];
|
||
|
||
// 分割版本号
|
||
NSArray *newComponents = [newVersion componentsSeparatedByString:@"."];
|
||
NSArray *oldComponents = [oldVersion componentsSeparatedByString:@"."];
|
||
|
||
// 获取最大组件数
|
||
NSInteger maxCount = MAX(newComponents.count, oldComponents.count);
|
||
|
||
for (NSInteger i = 0; i < maxCount; i++) {
|
||
// 获取当前位的版本号,如果不存在则默认为0
|
||
NSInteger newPart = (i < newComponents.count) ? [newComponents[i] integerValue] : 0;
|
||
NSInteger oldPart = (i < oldComponents.count) ? [oldComponents[i] integerValue] : 0;
|
||
|
||
if (newPart > oldPart) {
|
||
return 1; // 新版本更大
|
||
} else if (newPart < oldPart) {
|
||
return -1; // 旧版本更大
|
||
}
|
||
// 如果相等,继续比较下一位
|
||
}
|
||
|
||
return 0; // 版本完全相同
|
||
}
|
||
|
||
+ (BOOL)shouldUpdateFromVersion:(NSString *)oldVersion toVersion:(NSString *)newVersion {
|
||
NSInteger result = [self compareVersion:newVersion withOldVersion:oldVersion];
|
||
return result == 1; // 只有新版本更大时才需要更新
|
||
}
|
||
|
||
// 移除版本号前缀(如"v1.0.0" -> "1.0.0")
|
||
+ (NSString *)removeVersionPrefix:(NSString *)version {
|
||
if (!version) return @"";
|
||
|
||
// 去除空格
|
||
version = [version stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
|
||
|
||
// 如果以"v"或"V"开头,去除前缀
|
||
if (version.length > 0 && [[version substringToIndex:1] caseInsensitiveCompare:@"v"] == NSOrderedSame) {
|
||
version = [version substringFromIndex:1];
|
||
}
|
||
|
||
return version;
|
||
}
|
||
|
||
@end
|