//
// RMZAlertView.h
// ProjectManageEx
//
// Created by zhangjian on 16/7/29.
// Copyright © 2016年 zhangjian. All rights
reserved.
//
#import
@protocol RMZAlertViewDelegate;
@interface RMZAlertView : UIView
@property (strong, nonatomic) UIView *contentView;
@property (strong, nonatomic) UIImage *icon;
@property (strong, nonatomic) NSString *title;
@property (strong, nonatomic) NSString *message;
@property (weak, nonatomic) id delegate;
@property (nonatomic) BOOL afterClickIsHidden;
- (instancetype)initWithTitle:(NSString *)title icon:(UIImage *)icon message:(NSString *)message delegate:(id)delegate buttonTitles:(NSString *)buttonTitles, ... NS_REQUIRES_NIL_TERMINATION;
- (void)show;
- (void)hide;
- (void)setTitleColor:(UIColor *)color fontSize:(CGFloat)size;
- (void)setMessageColor:(UIColor *)color fontSize:(CGFloat)size;
- (void)setButtonTitleColor:(UIColor *)color fontSize:(CGFloat)size atIndex:(NSInteger)index;
- (void)setHeaderLineColor:(UIColor *)color ;
@end
@protocol RMZAlertViewDelegate
- (void)alertView:(RMZAlertView *)alertView clickedButAtIndex:(NSInteger)buttonIndex;
@end
//
// RMZAlertView.m
// ProjectManageEx
//
// Created by mac on 16/7/29.
// Copyright © 2016年 mobei. All rights
reserved.
//
#import "RMZAlertView.h"
#define BUTTON_FONT_SIZE 16
#define MARGIN_TOP 20
#define MARGIN_LEFT_LARGE 30
#define MARGIN_LEFT_SMALL 15
#define MARGIN_RIGHT_LARGE 30
#define MARGIN_RIGHT_SMALL 15
#define SPACE_LARGE 20
#define SPACE_SMALL 5
#define MESSAGE_LINE_SPACE 5
@interface RMZAlertView ()
@property (strong, nonatomic) UIView *backgroundView;
@property (strong, nonatomic) UIView *titleView;
@property (strong, nonatomic) UIView *headerLineView;
@property (strong, nonatomic) UIImageView *iconImageView;
@property (strong, nonatomic) UILabel *titleLabel;
@property (strong, nonatomic) UILabel *messageLabel;
@property (strong, nonatomic) NSMutableArray *buttonArray;
@property (strong, nonatomic) NSMutableArray *buttonTitleArray;
@end
CGFloat contentViewWidth;
CGFloat contentViewHeight;
@implementation RMZAlertView
- (instancetype)init {
if (self =
[super initWithFrame:[UIScreen mainScreen].bounds]) {
self.backgroundColor = [UIColor clearColor];
_backgroundView = [[UIView alloc] initWithFrame:self.frame];
_backgroundView.backgroundColor = [UIColor blackColor];
[self addSubview:_backgroundView];
_backgroundView.userInteractionEnabled = YES;
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer
alloc] initWithTarget:self action:@selector(tappedCancel)];
[_backgroundView addGestureRecognizer:tapGesture];
}
return
self;
}
//普通及带图标的alert
- (instancetype)initWithTitle:(NSString *)title icon:(UIImage *)icon message:(NSString *)message delegate:(id)delegate buttonTitles:(NSString *)buttonTitles, ... {
if (self =
[super initWithFrame:[UIScreen mainScreen].bounds]) {
_icon = icon;
_title = title;
_message = message;
_delegate = delegate;
_buttonArray = [NSMutableArray array];
_buttonTitleArray = [NSMutableArray array];
self.afterClickIsHidden = YES;
va_list args;
va_start(args, buttonTitles);
if (buttonTitles)
{
[_buttonTitleArray addObject:buttonTitles];
while (1)
{
NSString * otherButtonTitle = va_arg(args,
NSString *);
if(otherButtonTitle == nil) {
break;
} else {
[_buttonTitleArray addObject:otherButtonTitle];
}
}
}
va_end(args);
self.backgroundColor = [UIColor clearColor];
_backgroundView = [[UIView alloc] initWithFrame:self.frame];
_backgroundView.backgroundColor = [UIColor blackColor];
[self addSubview:_backgroundView];
[self initContentView];
}
return
self;
}
- (void)setContentView:(UIView *)contentView {
_contentView
= contentView;
_contentView.center = self.center;
[self
addSubview:_contentView];
}
- (void)setTitle:(NSString *)title {
_title =
title;
[self
initContentView];
}
- (void)setIcon:(UIImage *)icon {
_icon =
icon;
[self
initContentView];
}
- (void)setMessage:(NSString *)message {
_message =
message;
[self
initContentView];
}
- (void)initContentView {
contentViewWidth = 250 * self.frame.size.width / 320;
contentViewHeight = MARGIN_TOP;
_contentView
= [[UIView alloc] init];
_contentView.backgroundColor = [UIColor whiteColor];
_contentView.layer.cornerRadius = 5.0;
_contentView.layer.masksToBounds = YES;
[self
initTitleAndIcon];
[self
initMessage];
[self
initAllButtons];
_contentView.frame = CGRectMake(0, 0, contentViewWidth,
contentViewHeight);
_contentView.center = self.center;
[self
addSubview:_contentView];
}
- (void)initTitleAndIcon {
_titleView =
[[UIView alloc] init];
if (_icon !=
nil) {
_iconImageView = [[UIImageView alloc] init];
_iconImageView.image = _icon;
_iconImageView.frame = CGRectMake(0, 0, 20, 20);
[_titleView addSubview:_iconImageView];
}
CGSize
titleSize = [self getTitleSize];
if (_title
!= nil && ![_title isEqualToString:@""]) {
_titleLabel = [[UILabel alloc] init];
_titleLabel.text = _title;
_titleLabel.textColor = kColor(28, 28, 28, 1.0);
_titleLabel.textAlignment = NSTextAlignmentCenter;
_titleLabel.font = [UIFont systemFontOfSize:18.0f];
_titleLabel.numberOfLines = 0;
_titleLabel.lineBreakMode = NSLineBreakByWordWrappin g;
_titleLabel.frame = CGRectMake(MaxX(_iconImageView) + SPACE_SMALL,
1, titleSize.width, titleSize.height);
[_titleView addSubview:_titleLabel];
}
_titleView.frame = CGRectMake(0, MARGIN_TOP,
_iconImageView.frame.size.width + SPACE_SMALL + titleSize.width,
MAX(_iconImageView.frame.size.height, titleSize.height));
_titleView.center = CGPointMake(contentViewWidth / 2, MARGIN_TOP +
_titleView.frame.size.height / 2);
[_contentView addSubview:_titleView];
_headerLineView = [[UIView alloc]initWithFrame:CGRectMake(0,
MaxY(_titleView)+ SPACE_SMALL, contentViewWidth,
kLineHeight*2)];
_headerLineView.backgroundColor = kGrayLineColor;
[_contentView addSubview:_headerLineView];
contentViewHeight +=
HEIGHT(_titleView)+HEIGHT(_headerLineView);
}
- (void)initMessage {
if (_message
!= nil) {
_messageLabel = [[UILabel alloc] init];
_messageLabel.text = _message;
_messageLabel.textColor = kColor(120, 120, 120, 1.0);
_messageLabel.numberOfLines = 0;
_messageLabel.font = [UIFont
systemFontOfSize:BUTTON_FONT_SIZE];
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle
alloc]init];
paragraphStyle.lineSpacing = MESSAGE_LINE_SPACE;
NSDictionary *attributes =
@{NSParagraphStyleAttribut eName:paragraphStyle};
_messageLabel.attributedText = [[NSAttributedString
alloc]initWithString:_message attributes:attributes];
_messageLabel.textAlignment = NSTextAlignmentCenter;
CGSize messageSize = [self getMessageSize];
_messageLabel.frame = CGRectMake(MARGIN_LEFT_LARGE,
MaxY(_headerLineView) + SPACE_LARGE, MAX(contentViewWidth -
MARGIN_LEFT_LARGE - MARGIN_RIGHT_LARGE, messageSize.width),
messageSize.height);
[_contentView addSubview:_messageLabel];
contentViewHeight += SPACE_LARGE +
_messageLabel.frame.size.height;
}
}
- (void)initAllButtons {
if
(_buttonTitleArray.count > 0) {
contentViewHeight += SPACE_LARGE + 45;
UIView *horizonSperatorView = [[UIView alloc]
initWithFrame:CGRectMake(0, MaxY(_messageLabel) + SPACE_LARGE,
contentViewWidth, kLineHeight)];
horizonSperatorView.backgroundColor = kGrayLineColor;
[_contentView addSubview:horizonSperatorView];
CGFloat buttonWidth = contentViewWidth /
_buttonTitleArray.count;
for (NSString *buttonTitle in _buttonTitleArray) {
NSInteger index = [_buttonTitleArray
indexOfObject:buttonTitle];
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(index
* buttonWidth, MaxY(horizonSperatorView), buttonWidth, 44)];
button.titleLabel.font = [UIFont
systemFontOfSize:BUTTON_FONT_SIZE];
[button setTitle:buttonTitle forState:UIControlStateNormal];
[button setTitleColor:kColor(70, 130, 180, 1.0)
forState:UIControlStateNormal];
[button addTarget:self action:@selector(buttonWithPressed:)
forControlEvents:UIControlEventTouchUpIns ide];
[_buttonArray addObject:button];
[_contentView addSubview:button];
if (index < _buttonTitleArray.count - 1) {
UIView *verticalSeperatorView = [[UIView alloc]
initWithFrame:CGRectMake(MaxX(button), button.frame.origin.y,
kLineHeight, button.frame.size.height)];
verticalSeperatorView.backgroundColor = kGrayLineColor;
[_contentView addSubview:verticalSeperatorView];
}
}
}
}
- (CGSize)getTitleSize {
UIFont *font
= [UIFont systemFontOfSize:18];
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle
alloc] init];
paragraphStyle.lineBreakMode = NSLineBreakByWordWrappin g;
NSDictionary
*attributes = @{NSFontAttributeName:font,
NSParagraphStyleAttribut eName:paragraphStyle.copy};
CGSize size
= [_title boundingRectWithSize:CGSizeMake(contentViewWidth -
(MARGIN_LEFT_SMALL + MARGIN_RIGHT_SMALL +
_iconImageView.frame.size.width + SPACE_SMALL), 2000)
options:NSStringDrawingUsesLineF ragmentOrigin
attributes:attributes context:nil].size;
size.width =
ceil(size.width);
size.height
= ceil(size.height);
return
size;
}
- (CGSize)getMessageSize {
UIFont *font
= [UIFont systemFontOfSize:BUTTON_FONT_SIZE];
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle
alloc] init];
paragraphStyle.lineSpacing = MESSAGE_LINE_SPACE;
NSDictionary
*attributes = @{NSFontAttributeName:font,
NSParagraphStyleAttribut eName:paragraphStyle.copy};
CGSize size
= [_message boundingRectWithSize:CGSizeMake(contentViewWidth -
(MARGIN_LEFT_LARGE + MARGIN_RIGHT_LARGE), 2000)
options:NSStringDrawingUsesLineF ragmentOrigin
attributes:attributes context:nil].size;
size.width =
ceil(size.width);
size.height
= ceil(size.height);
return
size;
}
- (void)buttonWithPressed:(UIButton *)button {
if
(_delegate && [_delegate
respondsToSelector:@selector(alertView:clickedButAtIndex:)])
{
NSInteger index = [_buttonTitleArray
indexOfObject:button.titleLabel.text];
[_delegate alertView:self clickedButAtIndex:index];
}
if
(self.afterClickIsHidden) {
[self hide];
}
}
- (void)show {
// UIWindow
*window = [[UIApplication sharedApplication] keyWindow];
// NSArray
*windowViews = [window subviews];
//
if(windowViews && [windowViews count] > 0){
//
UIView *subView = [windowViews objectAtIndex:[windowViews
count]-1];
//
for(UIView *aSubView in subView.subviews)
//
{
//
[aSubView.layer removeAllAnimations];
//
}
//
[subView addSubview:self];
//
[self showBackground];
//
[self showAlertAnimation];
// }
UIWindow
*window = [[UIApplication sharedApplication].windows
objectAtIndex:1];
[window
addSubview:self];
[self
showBackground];
[self
showAlertAnimation];
}
- (void)hide {
_contentView.hidden = YES;
[self
hideAlertAnimation];
[self
removeFromSuperview];
}
- (void)setTitleColor:(UIColor *)color fontSize:(CGFloat)size {
if (color !=
nil) {
_titleLabel.textColor = color;
}
if (size
> 0) {
_titleLabel.font = [UIFont systemFontOfSize:size];
}
}
- (void)setMessageColor:(UIColor *)color fontSize:(CGFloat)size {
if (color !=
nil) {
_messageLabel.textColor = color;
}
if (size
> 0) {
_messageLabel.font = [UIFont systemFontOfSize:size];
}
}
- (void)setHeaderLineColor:(UIColor *)color{
if (color !=
nil) {
_headerLineView.backgroundColor = color;
}
}
- (void)setButtonTitleColor:(UIColor *)color fontSize:(CGFloat)size atIndex:(NSInteger)index {
UIButton
*button = _buttonArray[index];
if (color !=
nil) {
[button setTitleColor:color forState:UIControlStateNormal];
}
if (size
> 0) {
button.titleLabel.font = [UIFont systemFontOfSize:size];
}
}
- (void)showBackground
{
_backgroundView.alpha = 0;
[UIView
beginAnimations:@"fadeIn" context:nil];
[UIView
setAnimationDuration:0.35];
_backgroundView.alpha = 0.6;
[UIView
commitAnimations];
}
-(void)showAlertAnimation
{
CAKeyframeAnimation * animation;
animation =
[CAKeyframeAnimation animationWithKeyPath:@"transform"];
animation.duration = 0.30;
animation.removedOnCompletion = YES;
animation.fillMode = kCAFillModeForwards;
NSMutableArray *values = [NSMutableArray array];
[values
addObject:[NSValue
valueWithCATransform3D:CATransform3DMakeScale(0.9, 0.9,
1.0)]];
[values
addObject:[NSValue
valueWithCATransform3D:CATransform3DMakeScale(1.1, 1.1,
1.0)]];
[values
addObject:[NSValue
valueWithCATransform3D:CATransform3DMakeScale(1.0, 1.0,
1.0)]];
animation.values = values;
[_contentView.layer addAnimation:animation forKey:nil];
}
- (void)hideAlertAnimation {
[UIView
beginAnimations:@"fadeIn" context:nil];
[UIView
setAnimationDuration:0.35];
_backgroundView.alpha = 0.0;
[UIView
commitAnimations];
}
- (void)tappedCancel
{
[self
hide];
}
@end
//
//
//
//
//
//
#import
@protocol RMZAlertViewDelegate;
@interface RMZAlertView : UIView
@property (strong, nonatomic) UIView *contentView;
@property (strong, nonatomic) UIImage *icon;
@property (strong, nonatomic) NSString *title;
@property (strong, nonatomic) NSString *message;
@property (weak, nonatomic) id delegate;
@property (nonatomic) BOOL afterClickIsHidden;
- (instancetype)initWithTitle:(NSString *)title icon:(UIImage *)icon message:(NSString *)message delegate:(id)delegate buttonTitles:(NSString *)buttonTitles, ... NS_REQUIRES_NIL_TERMINATION;
- (void)show;
- (void)hide;
- (void)setTitleColor:(UIColor *)color fontSize:(CGFloat)size;
- (void)setMessageColor:(UIColor *)color fontSize:(CGFloat)size;
- (void)setButtonTitleColor:(UIColor *)color fontSize:(CGFloat)size atIndex:(NSInteger)index;
- (void)setHeaderLineColor:(UIColor *)color ;
@end
@protocol RMZAlertViewDelegate
- (void)alertView:(RMZAlertView *)alertView clickedButAtIndex:(NSInteger)buttonIndex;
@end
//
//
//
//
//
//
//
#import "RMZAlertView.h"
#define BUTTON_FONT_SIZE 16
#define MARGIN_TOP 20
#define MARGIN_LEFT_LARGE 30
#define MARGIN_LEFT_SMALL 15
#define MARGIN_RIGHT_LARGE 30
#define MARGIN_RIGHT_SMALL 15
#define SPACE_LARGE 20
#define SPACE_SMALL 5
#define MESSAGE_LINE_SPACE 5
@interface RMZAlertView ()
@property (strong, nonatomic) UIView *backgroundView;
@property (strong, nonatomic) UIView *titleView;
@property (strong, nonatomic) UIView *headerLineView;
@property (strong, nonatomic) UIImageView *iconImageView;
@property (strong, nonatomic) UILabel *titleLabel;
@property (strong, nonatomic) UILabel *messageLabel;
@property (strong, nonatomic) NSMutableArray *buttonArray;
@property (strong, nonatomic) NSMutableArray *buttonTitleArray;
@end
CGFloat contentViewWidth;
CGFloat contentViewHeight;
@implementation RMZAlertView
- (instancetype)init {
}
//普通及带图标的alert
- (instancetype)initWithTitle:(NSString *)title icon:(UIImage *)icon message:(NSString *)message delegate:(id)delegate buttonTitles:(NSString *)buttonTitles, ... {
}
- (void)setContentView:(UIView *)contentView {
}
- (void)setTitle:(NSString *)title {
}
- (void)setIcon:(UIImage *)icon {
}
- (void)setMessage:(NSString *)message {
}
- (void)initContentView {
}
- (void)initTitleAndIcon {
}
- (void)initMessage {
}
- (void)initAllButtons {
}
- (CGSize)getTitleSize {
}
- (CGSize)getMessageSize {
}
- (void)buttonWithPressed:(UIButton *)button {
}
- (void)show {
}
- (void)hide {
}
- (void)setTitleColor:(UIColor *)color fontSize:(CGFloat)size {
}
- (void)setMessageColor:(UIColor *)color fontSize:(CGFloat)size {
}
- (void)setHeaderLineColor:(UIColor *)color{
}
- (void)setButtonTitleColor:(UIColor *)color fontSize:(CGFloat)size atIndex:(NSInteger)index {
}
- (void)showBackground
{
}
-(void)showAlertAnimation
{
}
- (void)hideAlertAnimation {
}
- (void)tappedCancel
{
}
@end