// // ComontAlretViewController.m // 隐私保护 // // Created by APPLE on 2023/8/30. // #import "ComontAlretViewController.h" #import @interface ComontAlretViewController (){ NSString *titleStr; NSString *msgStr; NSString *imageStr; NSString *cancelTitleStr; NSString *okTitleStr; BOOL isOkBtnHighlight; CommonAlert_ClickOkBtn didClickOkBtn; CommonAlert_ClickCancelBtn didClickCanaelBtn; //扩展 按钮倒计时 NSInteger countdownSeconds; NSTimer *curTimer; } @end @implementation ComontAlretViewController @synthesize delegate; - (id)initWithTiTle:(NSString *)title msg:(NSString *)msg imageStr:(NSString *)image cancelTitle:(NSString *)cancelTitle okTitle:(NSString *)okTitle isOkBtnHighlight:(BOOL)okBtnHighlight didClickOk:(CommonAlert_ClickOkBtn)ok didClickCancel:(CommonAlert_ClickCancelBtn)Cancel{ self = [super init]; titleStr = title; msgStr = msg; imageStr = image; cancelTitleStr = cancelTitle; okTitleStr = okTitle; isOkBtnHighlight = okBtnHighlight; didClickOkBtn = ok; didClickCanaelBtn = Cancel; return self; } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. [self drawAnyView]; } - (void)drawAnyView{ [self.view setBackgroundColor:HW000000Color60]; [self.toolBar setHidden:YES]; [self.navigationBar setHidden:YES]; UIView *bgView = [[UIView alloc] init]; [bgView setBackgroundColor:[UIColor whiteColor]]; [bgView.layer setCornerRadius:8.f]; [self.view addSubview:bgView]; [bgView mas_makeConstraints:^(MASConstraintMaker *make) { make.centerY.equalTo(self.view.mas_centerY).offset(10*HAUTOSCALE); make.centerX.equalTo(self.view.mas_centerX); make.width.mas_equalTo(300.f); }]; CGFloat curTop = 30.0; //图片 UIImageView *topImageView = [[UIImageView alloc] init]; //topImageView.backgroundColor = [UIColor redColor]; if(imageStr && imageStr.length > 0){ topImageView.image = [UIImage imageNamed:imageStr]; [bgView addSubview:topImageView]; [topImageView mas_makeConstraints:^(MASConstraintMaker *make) { make.width.mas_equalTo(80.f); make.height.mas_equalTo(80.f); make.centerX.equalTo(bgView.mas_centerX);; make.top.mas_equalTo(curTop); }]; curTop = 30 + 80 + 10.0; } /*主标题*/ UILabel *titleLabel = [[UILabel alloc] init]; [titleLabel setTextColor:HW0A132BColor]; [titleLabel setFont:[UIFont boldSystemFontOfSize:16.f]]; [titleLabel setTextAlignment:(NSTextAlignmentCenter)]; [titleLabel setText:titleStr]; [titleLabel setNumberOfLines:0]; if (titleStr.length > 0){ [bgView addSubview:titleLabel]; [titleLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(20.f); make.right.mas_equalTo(-20.f); make.top.mas_equalTo(curTop); }]; } /*副标题*/ UILabel *msgLabel = [[UILabel alloc] init]; [msgLabel setTextColor:HW333333Color]; [msgLabel setFont:[UIFont systemFontOfSize:15.f]]; [msgLabel setTextAlignment:(NSTextAlignmentCenter)]; msgLabel.tag = 11; [msgLabel setText:msgStr]; [msgLabel setNumberOfLines:0]; if (msgStr.length > 0){ [bgView addSubview:msgLabel]; [msgLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(20.f); make.right.mas_equalTo(-20.f); if (titleStr.length > 0){ make.top.equalTo(titleLabel.mas_bottom).offset(15.f); }else{ make.top.mas_equalTo(curTop); } }]; } /*双按钮*/ /*取消*/ /*取消按钮*/ UIButton *cancelBtn = [[UIButton alloc] init]; cancelBtn.frame = CGRectMake(0, 0, 115, 48.f); CGFloat w_btn = 200; if (okTitleStr.length > 0){ w_btn = 115; } // gradient CAGradientLayer *gl = [CAGradientLayer layer]; gl.frame = CGRectMake(0,0,w_btn,48.f); gl.startPoint = CGPointMake(0, 0.5); gl.endPoint = CGPointMake(1, 0.5); gl.colors = @[(__bridge id)HW0CDEFDColor.CGColor, (__bridge id)HW058DFBColor.CGColor]; gl.locations = @[@(0), @(1.0f)]; if(!isOkBtnHighlight){ [cancelBtn.layer addSublayer:gl]; [cancelBtn setTitleColor:[UIColor whiteColor] forState:(UIControlStateNormal)]; } else{ [cancelBtn setTitleColor:HW0A132BColor forState:(UIControlStateNormal)]; [cancelBtn setBackgroundColor:HWE3E8F1Color]; } [cancelBtn addTarget:self action:@selector(cancelBtnClick) forControlEvents:(UIControlEventTouchUpInside)]; [cancelBtn setTitle:cancelTitleStr forState:(UIControlStateNormal)]; [cancelBtn.titleLabel setFont:[UIFont systemFontOfSize:16.f]]; [cancelBtn.layer setCornerRadius:8.f]; cancelBtn.clipsToBounds = YES; cancelBtn.tag = 999; [bgView addSubview:cancelBtn]; [cancelBtn mas_makeConstraints:^(MASConstraintMaker *make) { if (okTitleStr.length > 0){ make.left.mas_equalTo(24); }else{ make.centerX.equalTo(bgView.mas_centerX); } if (msgStr.length > 0){ make.top.equalTo(msgLabel.mas_bottom).offset(15.f); }else{ make.top.equalTo(titleLabel.mas_bottom).offset(25.f); } make.width.mas_equalTo(w_btn); make.bottom.equalTo(bgView.mas_bottom).offset(-30.f); make.height.mas_equalTo(48.f); }]; if (okTitleStr.length > 0){ /*残忍拒绝*/ UIButton *okBtn = [[UIButton alloc] init]; if(!isOkBtnHighlight){ [okBtn setTitleColor:HW0A132BColor forState:(UIControlStateNormal)]; [okBtn setBackgroundColor:HWE3E8F1Color]; } else{ [okBtn.layer addSublayer:gl]; [okBtn setTitleColor:[UIColor whiteColor] forState:(UIControlStateNormal)]; } [okBtn addTarget:self action:@selector(okBtnClick) forControlEvents:(UIControlEventTouchUpInside)]; [okBtn setTitle:okTitleStr forState:(UIControlStateNormal)]; //[okBtn setTitleColor:HW0A132BColor forState:(UIControlStateNormal)]; [okBtn.titleLabel setFont:[UIFont systemFontOfSize:16.f]]; [okBtn.layer setCornerRadius:8.f]; //[okBtn setBackgroundColor:HWE3E8F1Color]; okBtn.clipsToBounds = YES; [bgView addSubview:okBtn]; [okBtn mas_makeConstraints:^(MASConstraintMaker *make) { make.right.mas_equalTo(-24.f); make.width.mas_equalTo(w_btn); make.top.equalTo(cancelBtn.mas_top); make.height.mas_equalTo(48.f); }]; } } //- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ // [self dismissViewControllerAnimated:YES completion:^{ // ; // }]; //} - (void)cancelBtnClick{ if(curTimer)[curTimer invalidate]; [self dismissViewControllerAnimated:YES completion:^{ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ if ([self->delegate respondsToSelector:@selector(CommonAlertCancelBtnClickPressed)]){ [self->delegate CommonAlertCancelBtnClickPressed]; } if(self->didClickCanaelBtn){ self->didClickCanaelBtn(); } }); }]; } - (void)okBtnClick{ if(curTimer)[curTimer invalidate]; [self dismissViewControllerAnimated:YES completion:^{ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ if ([self->delegate respondsToSelector:@selector(CommonAlertokBtnClickPressed)]){ [self->delegate CommonAlertokBtnClickPressed]; } if(self->didClickOkBtn){ self->didClickOkBtn(); } }); }]; } - (void)setButtonCountdownFun:(NSInteger)second { UIButton *but = [self.view viewWithTag:999]; if(but && [but isKindOfClass:[UIButton class]]){ countdownSeconds = second; [but setEnabled:NO]; but.alpha = 0.5; NSString *curTitle = cancelTitleStr; curTitle = [[NSString alloc] initWithFormat:@"%@(%ld)",curTitle,countdownSeconds]; [but setTitle:curTitle forState:UIControlStateNormal]; [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{ [[UIApplication sharedApplication] endBackgroundTask:UIBackgroundTaskInvalid]; }]; [curTimer invalidate]; curTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(handleCountdownFun) userInfo:nil repeats:YES]; [[NSRunLoop mainRunLoop] addTimer:curTimer forMode:NSRunLoopCommonModes]; } } - (void)handleCountdownFun { if(countdownSeconds >= 1){ countdownSeconds --; UIButton *but = [self.view viewWithTag:999]; NSString *curTitle = cancelTitleStr; curTitle = [[NSString alloc] initWithFormat:@"%@(%ld)",curTitle,countdownSeconds]; [but setTitle:curTitle forState:UIControlStateNormal]; } else{ [curTimer invalidate]; [self dismissViewControllerAnimated:NO completion:^{ if ([self->delegate respondsToSelector:@selector(CommonAlertokBtnClickPressed)]){ [self->delegate CommonAlertokBtnClickPressed]; } if(self->didClickOkBtn){ self->didClickOkBtn(); } }]; } } - (void)setMsgTextAlignment:(NSTextAlignment)textAlignment { UILabel *label = [self.view viewWithTag:11]; if(label && [label isKindOfClass:[UILabel class]]){ label.textAlignment = textAlignment; } } /* #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. } */ @end