// // EMAlertController.m // ChatDemo-UI3.0 // // Created by XieYajie on 2018/12/24. // Copyright © 2018 XieYajie. All rights reserved. // #import "EMAlertController.h" @interface EMAlertController() @property (nonatomic, strong) UIView *mainView; @end @implementation EMAlertController - (instancetype)initWithStyle:(EMAlertViewStyle)aStyle message:(NSString *)aMessage { self = [super init]; if (self) { [self _setupWithStyle:aStyle message:aMessage]; } return self; } - (void)_setupWithStyle:(EMAlertViewStyle)aStyle message:(NSString *)aMessage { self.backgroundColor = [UIColor colorWithWhite:0.2 alpha:0.1]; self.mainView = [[UIView alloc] init]; self.mainView.backgroundColor = [UIColor whiteColor]; self.mainView.layer.cornerRadius = 5.0; self.mainView.layer.shadowColor = [UIColor grayColor].CGColor; self.mainView.layer.shadowOffset = CGSizeMake(2, 5); self.mainView.layer.shadowOpacity = 0.5; [self addSubview:self.mainView]; [self.mainView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self).offset(-60); make.centerX.equalTo(self); make.left.greaterThanOrEqualTo(self).offset(30); }]; UIView *bgView = [[UIView alloc] init]; bgView.backgroundColor = [UIColor clearColor]; bgView.clipsToBounds = YES; bgView.layer.cornerRadius = 5.0; [self.mainView addSubview:bgView]; [bgView mas_makeConstraints:^(MASConstraintMaker *make) { make.edges.equalTo(self.mainView); }]; UIView *line = [[UIView alloc] init]; line.backgroundColor = [self _tagColorWithStyle:aStyle]; [bgView addSubview:line]; [line mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(bgView); make.bottom.equalTo(bgView); make.left.equalTo(bgView); make.width.equalTo(@3); }]; UIImageView *tagView = [[UIImageView alloc] init]; tagView.image = [self _tagImageWithStyle:aStyle]; [bgView addSubview:tagView]; [tagView mas_makeConstraints:^(MASConstraintMaker *make) { make.centerY.equalTo(bgView); make.left.equalTo(bgView).offset(15); }]; UILabel *label = [[UILabel alloc] init]; label.numberOfLines = 5; label.font = [UIFont systemFontOfSize:16]; label.text = aMessage; [bgView addSubview:label]; [label mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(tagView.mas_right).offset(10); make.right.equalTo(bgView).offset(-15); make.top.equalTo(bgView).offset(12); make.bottom.equalTo(bgView).offset(-12); }]; } - (UIColor *)_tagColorWithStyle:(EMAlertViewStyle)aStyle { UIColor *color = [UIColor blackColor]; switch (aStyle) { case EMAlertViewStyleError: color = [UIColor colorWithRed:204 / 255.0 green:58 / 255.0 blue:35 / 255.0 alpha:1.0]; break; case EMAlertViewStyleInfo: color = [UIColor colorWithRed:232 / 255.0 green:192 / 255.0 blue:64 / 255.0 alpha:1.0]; break; case EMAlertViewStyleSuccess: color = [UIColor colorWithRed:35 / 255.0 green:158 / 255.0 blue:85 / 255.0 alpha:1.0]; break; default: break; } return color; } - (UIImage *)_tagImageWithStyle:(EMAlertViewStyle)aStyle { NSString *imageName = @"alert_default"; switch (aStyle) { case EMAlertViewStyleError: imageName = @"alert_error"; break; case EMAlertViewStyleInfo: imageName = @"alert_info"; break; case EMAlertViewStyleSuccess: imageName = @"alert_success"; break; default: break; } return [UIImage imageNamed:imageName]; } + (void)showAlertWithStyle:(EMAlertViewStyle)aStyle message:(NSString *)aMessage { EMAlertController *view = [[EMAlertController alloc] initWithStyle:aStyle message:aMessage]; UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow; [keyWindow addSubview:view]; [view mas_makeConstraints:^(MASConstraintMaker *make) { make.edges.equalTo(keyWindow); }]; [view layoutIfNeeded]; [view setNeedsUpdateConstraints]; [view.mainView mas_updateConstraints:^(MASConstraintMaker *make) { make.top.equalTo(view).offset(50); }]; [UIView animateWithDuration:0.3 animations:^{ [view layoutIfNeeded]; } completion:^(BOOL finished) { // }]; dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 2 * NSEC_PER_SEC); dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ [view layoutIfNeeded]; [view setNeedsUpdateConstraints]; [view.mainView mas_updateConstraints:^(MASConstraintMaker *make) { make.top.equalTo(view).offset(-60); }]; [UIView animateWithDuration:0.3 animations:^{ [view layoutIfNeeded]; } completion:^(BOOL finished) { [view removeFromSuperview]; }]; }); } + (void)showErrorAlert:(NSString *)aMessage { [EMAlertController showAlertWithStyle:EMAlertViewStyleError message:aMessage]; } + (void)showSuccessAlert:(NSString *)aMessage { [EMAlertController showAlertWithStyle:EMAlertViewStyleSuccess message:aMessage]; } + (void)showInfoAlert:(NSString *)aMessage { [EMAlertController showAlertWithStyle:EMAlertViewStyleInfo message:aMessage]; } @end