// // RAlertView.m // RAlert // // Created by roycms on 2016/10/11. // Copyright © 2016年 roycms. All rights reserved. // #import "RAlertView.h" @interface RAlertView () @property (nonatomic,strong)NSArray *themeArray; @end @implementation RAlertView /** init @param style style description @return return value description */ - (instancetype)initWithStyle:(AlertStyle)style { self = [super init]; if (self) { [self initWindow:style]; } return self; } /** init @param style style description @param width width description @return return value description */ - (instancetype)initWithStyle:(AlertStyle)style width:(CGFloat)width{ self = [super init]; if (self) { [self initWindow:style]; [self setAlertWidth:width]; } return self; } /** 准备默认数据 */ -(void)prepareData{ self.themeArray = @[RGB16(0X1abc9c), RGB16(0X27ae60), RGB16(0X2980b9), RGB16(0X2c3e50), RGB16(0Xf39c12), RGB16(0Xc0392b), RGB16(0X7f8c8d), RGB16(0X8e44ad)]; [self.confirmButton setBackgroundColor:self.themeArray[(arc4random() % 8)]]; [self.confirmButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; } /** 设置弹框的宽度 @param width width 宽度值 范围 0-1 百分比 */ -(void)setAlertWidth:(CGFloat)width{ [self.mainView mas_updateConstraints:^(MASConstraintMaker *make) { if (width > 1) { make.width.offset(width); } else if(width > 0 && width <= 1){ make.width.offset([UIScreen mainScreen].bounds.size.width * width); } else{ make.width.offset([UIScreen mainScreen].bounds.size.width * 0.7); } }]; } /** 设置 主题的 set 方法 @param theme theme description */ -(void)setTheme:(UIColor*)theme{ [self.confirmButton setBackgroundColor:theme]; [self.confirmButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; } /** 单击 背景 是否关闭弹窗 @param isClickBackgroundCloseWindow isClickBackgroundCloseWindow description */ -(void)setIsClickBackgroundCloseWindow:(BOOL)isClickBackgroundCloseWindow{ if(isClickBackgroundCloseWindow){ UITapGestureRecognizer*tapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(exit)]; [self addGestureRecognizer:tapGesture]; } } -(void)initWindow:(AlertStyle)style{ [self viewInitUI]; switch (style) { case SimpleAlert: [self simpleAlertViewInitUI]; break; case ConfirmAlert: [self confirmAlertViewInitUI]; break; case CancelAndConfirmAlert: [self cancelAndConfirmAlertViewInitUI]; break; } [self animateSenior]; [self prepareData]; } /** view 初始化 */ -(void)viewInitUI{ UIWindow *window = [[[UIApplication sharedApplication] delegate] window]; [window addSubview:self]; [self addSubview:self.mainView]; [self setBackgroundColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:0.8]]; [self.mainView insertSubview:self.closedButton atIndex:999]; [self.mainView addSubview:self.headerTitleLabel]; [self.mainView insertSubview:self.contentView atIndex:0]; [self mas_makeConstraints:^(MASConstraintMaker *make) { make.edges.equalTo(window); }]; self.mainView.translatesAutoresizingMaskIntoConstraints =NO; [self.mainView mas_makeConstraints:^(MASConstraintMaker *make) { make.center.equalTo(self.mainView.superview); make.width.offset([UIScreen mainScreen].bounds.size.width * 0.7); }]; [self.closedButton mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.mainView); make.right.equalTo(self.mainView); make.width.height.offset(35); }]; [self.headerTitleLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.mainView).offset(10); make.left.equalTo(self.mainView).offset(15); make.right.equalTo(self.mainView).offset(-30); }]; [self.contentView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.headerTitleLabel.mas_bottom).offset(5); make.left.equalTo(self.headerTitleLabel); make.right.equalTo(self.mainView).offset(-15); make.bottom.equalTo(self.mainView).offset(-10); }]; } /** 无按钮 弹窗样式 */ -(void)simpleAlertViewInitUI{ [self.contentTextLabel setFont:[UIFont systemFontOfSize:15]]; [self.contentView addSubview:self.contentTextLabel]; [self.contentTextLabel sizeToFit]; [self.contentTextLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.contentView).offset(10); make.left.equalTo(self.contentView); make.right.equalTo(self.contentView); make.bottom.equalTo(self.contentView).offset(-10); }]; } /** 只有确认按钮 的弹窗样式 */ -(void)confirmAlertViewInitUI{ [self.mainView addSubview:self.confirmButton]; [self.contentView addSubview:self.contentTextLabel]; [self.contentTextLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.contentView).offset(10); make.left.equalTo(self.contentView); make.right.equalTo(self.contentView); }]; [self.confirmButton mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.contentTextLabel.mas_bottom).offset(10); make.left.right.equalTo(self.mainView); make.bottom.equalTo(self.mainView); make.height.offset(40); }]; } /** 有取消 按钮 和 确认按钮的弹窗样式 */ -(void)cancelAndConfirmAlertViewInitUI{ [self.mainView addSubview:self.cancelButton]; [self.mainView addSubview:self.confirmButton]; [self.contentView addSubview:self.contentTextLabel]; [self.contentTextLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.contentView).offset(10); make.left.equalTo(self.contentView); make.right.equalTo(self.contentView); }]; NSMutableArray *arrayM = @[].mutableCopy; [arrayM addObject:self.cancelButton]; [arrayM addObject:self.confirmButton]; [arrayM mas_distributeViewsAlongAxis:MASAxisTypeHorizontal withFixedSpacing:0 leadSpacing:0 tailSpacing:0]; [arrayM mas_makeConstraints:^(MASConstraintMaker *make) { make.height.equalTo(@40); make.bottom.equalTo(self.mainView); make.top.equalTo(self.contentTextLabel.mas_bottom).offset(10); }]; } /** 弹窗飞入 动画 */ -(void)animate{ [self setBackgroundColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:0]]; [UIView animateWithDuration:0.12 animations:^{ [self setBackgroundColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:0.8]]; }]; self.mainView.transform = CGAffineTransformMakeTranslation(0, 600); [UIView animateWithDuration:0.12 animations:^{ self.mainView.transform = CGAffineTransformMakeTranslation(0, 0); }]; } /** 弹窗飞入 渐变 动画 */ -(void)animateSenior{ self.mainView.transform = CGAffineTransformMakeTranslation(0, 600); [UIView animateWithDuration:0.2 delay:0 usingSpringWithDamping:0.35 initialSpringVelocity:0.5 options:UIViewAnimationOptionCurveLinear animations:^{ self.mainView.transform = CGAffineTransformMakeTranslation(0, 0); } completion:^(BOOL finished) { }]; } #pragma make 事件 /** 销毁弹窗 方法 */ -(void)exit{ [self removeFromSuperview]; } /** 关闭按钮事件 @param sender sender description */ -(void)closedButtonClick:(UIButton *)sender{ [self exit]; } /** 确定按钮的事件 @param sender sender description */ -(void)confirmButtonClick:(UIButton*)sender{ if(self.confirm){ self.confirm(); } [self exit]; } /** 取消按钮的 事件 @param sender sender description */ -(void)cancelButtonClick:(UIButton*)sender{ if(self.cancel){ self.cancel(); } [self exit]; } #pragma make 懒加载 -(UIView*)mainView{ if (_mainView == nil) { _mainView = [[UIView alloc]init]; [_mainView setBackgroundColor:[UIColor whiteColor]]; [_mainView.layer setMasksToBounds:YES]; [_mainView.layer setCornerRadius:4]; } return _mainView; } -(UIButton *)confirmButton{ if(_confirmButton == nil){ _confirmButton = [[UIButton alloc]init]; [_confirmButton setBackgroundColor:RGB16(0Xfddb43)]; [_confirmButton setTitle:@"Ok" forState:UIControlStateNormal]; [_confirmButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [_confirmButton setTitleColor:RGB16(0X3d3d3d) forState:UIControlStateNormal]; [_confirmButton.titleLabel setFont:[UIFont systemFontOfSize:15]]; [_confirmButton addTarget:self action:@selector(confirmButtonClick:) forControlEvents:UIControlEventTouchUpInside]; } return _confirmButton; } -(UIButton *)cancelButton{ if(_cancelButton == nil){ _cancelButton = [[UIButton alloc]init]; [_cancelButton setBackgroundColor:RGB16(0XEBECED)]; [_cancelButton setTitle:@"Cancel" forState:UIControlStateNormal]; [_cancelButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [_cancelButton setTitleColor:RGB16(0X3d3d3d) forState:UIControlStateNormal]; [_cancelButton.titleLabel setFont:[UIFont systemFontOfSize:15]]; [_cancelButton addTarget:self action:@selector(cancelButtonClick:) forControlEvents:UIControlEventTouchUpInside]; } return _cancelButton; } -(UIButton *)closedButton{ if(_closedButton == nil){ _closedButton = [[UIButton alloc]init]; [_closedButton setImage:[UIImage imageNamed:@"closed.png"] forState:UIControlStateNormal]; [_closedButton addTarget:self action:@selector(closedButtonClick:) forControlEvents:UIControlEventTouchUpInside]; } return _closedButton; } -(UILabel*)headerTitleLabel { if (_headerTitleLabel == nil) { _headerTitleLabel = [[UILabel alloc]init]; [_headerTitleLabel setFont:[UIFont systemFontOfSize:15]]; [_headerTitleLabel setTextAlignment:NSTextAlignmentCenter]; [_headerTitleLabel setTextColor:RGB16(0X3d3d3d)]; } return _headerTitleLabel; } -(UIView *)contentView{ if(_contentView==nil){ _contentView =[[UIView alloc]init]; [_contentView setBackgroundColor:[UIColor whiteColor]]; } return _contentView; } -(UILabel*)contentTextLabel { if (_contentTextLabel == nil) { _contentTextLabel = [[UILabel alloc]init]; [_contentTextLabel setFont:[UIFont systemFontOfSize:13]]; [_contentTextLabel setTextAlignment:NSTextAlignmentCenter]; [_contentTextLabel setTextColor:RGB16(0X898989)]; _contentTextLabel.numberOfLines = 0; } return _contentTextLabel; } @end