共享一个右侧滑出的自动消失的提示框

来源:互联网 发布:淘宝网李宁 编辑:程序博客网 时间:2024/05/15 23:52

这个控件是三年前我在亚信集团工作的时候开发,今天趴出来,顺便修改一下支持最新的版本的iOS。

这是一个从屏幕的右侧中间滑出来自动提示框,同时还支持网路请求的时候等待提示框。

////  SlidingPromptView.h//  ChannelMgr////  Created by wuyj on 5/27/13.//  Copyright (c) 2013 asiainfo-linkage. All rights reserved.//#import <UIKit/UIKit.h>@protocol SlidingPromptViewDelegate <NSObject>@optional-(void)dismissComplete;@end@interface SlidingPromptView : UIView{}+(void)setDismissCompleteDelegate:(id<SlidingPromptViewDelegate>)dd;//显示提示框+(void)showLoadingStatus:(NSString*)status;+(void)showStatus:(NSString*)status withFlagImage:(NSString*)flagImage;+(void)showLoadingStatus:(NSString*)status duration:(NSTimeInterval)seconds;+(void)showStatus:(NSString*)status withFlagImage:(NSString*)flagImage duration:(NSTimeInterval)seconds;//在提示框中,修改显示内容+(void)setStatus:(NSString*)status;+(void)setStatus:(NSString*)status withFlagImage:(NSString*)flagImage;//隐藏提示框+(void)dismiss;+(void)dismiss:(NSString*)status withFlagImage:(NSString*)flagImage duration:(NSTimeInterval)seconds;+(void)dismiss:(NSString*)status duration:(NSTimeInterval)seconds;@end
////  SlidingPromptView.m//  ChannelMgr////  Created by wuyj on 5/27/13.//  Copyright (c) 2013 asiainfo-linkage. All rights reserved.//#import "SlidingPromptView.h"#define screenHeight [UIScreen mainScreen].bounds.size.height#define screenWidth [UIScreen mainScreen].bounds.size.width#define slidingPromptViewHeight 91#define slidingPromptViewWidth 165#define flagImageViewTag    200#define indicatorViewTag    201#define prompteViewTag      202@interface SlidingPromptView()@property(nonatomic,assign)BOOL loadingType;@property(nonatomic,retain,readonly)NSTimer* fadeOutTimer;@property(nonatomic,assign)id<SlidingPromptViewDelegate> delegate;@end@implementation SlidingPromptView@synthesize loadingType;@synthesize fadeOutTimer;@synthesize delegate;+ (SlidingPromptView*)sharedView {    static dispatch_once_t once;    static SlidingPromptView *sharedView;    dispatch_once(&once, ^ { sharedView = [[SlidingPromptView alloc] initWithFrame:CGRectMake(screenWidth, (screenHeight-slidingPromptViewHeight)/2.0,slidingPromptViewWidth,slidingPromptViewHeight)];        [[[UIApplication sharedApplication] keyWindow] addSubview:sharedView];    });    return sharedView;}+(void)setDismissCompleteDelegate:(id<SlidingPromptViewDelegate>)dd{    [SlidingPromptView sharedView].delegate = dd;}- (void)setFadeOutTimer:(NSTimer *)newTimer {    if(fadeOutTimer){        //[fadeOutTimer invalidate];//因为不是一个重复性的NSTimer所以不需要invalidate        fadeOutTimer = nil;    }    if(newTimer)        fadeOutTimer = newTimer;}- (id)initWithFrame:(CGRect)frame{    self = [super initWithFrame:frame];    if (self) {        // Initialization code        [self setBackgroundColor:[UIColor colorWithWhite:0.0 alpha:0.7]];        [self setClipsToBounds:YES];    }    return self;}#pragma mark - Show Methods+(void)showLoadingStatus:(NSString*)status{    [[SlidingPromptView sharedView] setLoadingType:YES];    [[SlidingPromptView sharedView] showStatus:status withFlagImage:nil isLoading:YES];}+(void)showStatus:(NSString*)status withFlagImage:(NSString*)flagImage{    [[SlidingPromptView sharedView] setLoadingType:NO];    [[SlidingPromptView sharedView] showStatus:status withFlagImage:flagImage isLoading:NO];}+(void)showLoadingStatus:(NSString*)status duration:(NSTimeInterval)seconds{    [[SlidingPromptView sharedView] setLoadingType:YES];    [[SlidingPromptView sharedView] showStatus:status withFlagImage:nil isLoading:YES];    [[SlidingPromptView sharedView] dismiss:seconds];}+(void)showStatus:(NSString*)status withFlagImage:(NSString*)flagImage duration:(NSTimeInterval)seconds{    [[SlidingPromptView sharedView] setLoadingType:NO];    [[SlidingPromptView sharedView] showStatus:status withFlagImage:flagImage isLoading:NO];    [[SlidingPromptView sharedView] dismiss:seconds];}#pragma mark - Dismiss Methods+(void)dismiss{    [[SlidingPromptView sharedView] dismiss];}+(void)dismiss:(NSString*)status withFlagImage:(NSString*)flagImage duration:(NSTimeInterval)seconds{    [[SlidingPromptView sharedView] setStatus:status withFlagImage:flagImage isLoading:NO isShow:NO];    [[SlidingPromptView sharedView] dismiss:seconds];}+(void)dismiss:(NSString*)status duration:(NSTimeInterval)seconds{    [[SlidingPromptView sharedView] setStatus:status withFlagImage:nil isLoading:NO isShow:NO];    [[SlidingPromptView sharedView] dismiss:seconds];}#pragma mark - Set Status Methods+(void)setStatus:(NSString*)status{    [[SlidingPromptView sharedView] setStatus:status];}+(void)setStatus:(NSString*)status withFlagImage:(NSString*)flagImage{    [[SlidingPromptView sharedView] setStatus:status withFlagImage:flagImage isLoading:NO isShow:NO];}#pragma mark - Private Methods-(void)setStatus:(NSString*)status{    dispatch_async(dispatch_get_main_queue(), ^{        UIImageView* flag = (UIImageView*)[self viewWithTag:flagImageViewTag];        UILabel* prompt =(UILabel*)[self viewWithTag:prompteViewTag];        UIActivityIndicatorView* indicatorView = (UIActivityIndicatorView*)[self viewWithTag:indicatorViewTag];        BOOL type = [[SlidingPromptView sharedView] loadingType];        if (type) {            flag.hidden = YES;            indicatorView.hidden = NO;            UIFont* font = prompt.font;            NSDictionary *dictionaryAttributes = @{NSFontAttributeName:font,};            CGRect stringRect = [status boundingRectWithSize:CGSizeMake(self.frame.size.width-40-5,slidingPromptViewHeight) options:NSStringDrawingUsesLineFragmentOrigin  attributes:dictionaryAttributes context:nil];            [prompt setFrame:CGRectMake(40, (self.frame.size.height-stringRect.size.height)/2.0, stringRect.size.width, stringRect.size.height)];            [prompt setText:status];        }else{            flag.hidden = NO;            indicatorView.hidden = YES;            UIImage* image = flag.image;            UIFont* font = prompt.font;            NSDictionary *dictionaryAttributes = @{NSFontAttributeName:font,};            CGRect stringRect = [status boundingRectWithSize:CGSizeMake(self.frame.size.width-12*2-image.size.width-5, slidingPromptViewHeight) options:NSStringDrawingUsesLineFragmentOrigin  attributes:dictionaryAttributes context:nil];            [prompt setText:status];            [prompt setFrame:CGRectMake(12*2+image.size.width, (self.frame.size.height-stringRect.size.height)/2.0, stringRect.size.width, stringRect.size.height)];        }    });}-(void)setStatus:(NSString*)status withFlagImage:(NSString*)flagImage isLoading:(BOOL)loading isShow:(BOOL)show{    dispatch_async(dispatch_get_main_queue(), ^{        UIImageView* flag = (UIImageView*)[self viewWithTag:flagImageViewTag];        UILabel* prompt =(UILabel*)[self viewWithTag:prompteViewTag];        UIActivityIndicatorView* indicatorView = (UIActivityIndicatorView*)[self viewWithTag:indicatorViewTag];        UIFont* font = prompt.font;        [prompt setText:status];        if (loading) {            flag.hidden = YES;            indicatorView.hidden = NO;            CGPoint point = CGPointMake(20, self.frame.size.height/2.0);            [indicatorView setCenter:point];            [indicatorView startAnimating];            NSDictionary *dictionaryAttributes = @{NSFontAttributeName:font,};            CGRect stringRect = [status boundingRectWithSize:CGSizeMake(self.frame.size.width-40-5, slidingPromptViewHeight) options:NSStringDrawingUsesLineFragmentOrigin  attributes:dictionaryAttributes context:nil];            [prompt setFrame:CGRectMake(40, (self.frame.size.height-stringRect.size.height)/2.0, stringRect.size.width, stringRect.size.height)];        }else{            flag.hidden = NO;            indicatorView.hidden = YES;            UIImage* image = [UIImage imageNamed:flagImage];            [flag setImage:[UIImage imageNamed:flagImage]];            [flag setFrame:CGRectMake(12, (self.frame.size.height-image.size.height)/2.0, image.size.width, image.size.height)];            NSDictionary *dictionaryAttributes = @{NSFontAttributeName:font,};            CGRect stringRect = [status boundingRectWithSize:CGSizeMake(self.frame.size.width-12*2-image.size.width-5, slidingPromptViewHeight) options:NSStringDrawingUsesLineFragmentOrigin  attributes:dictionaryAttributes context:nil];            [prompt setFrame:CGRectMake(12*2+image.size.width, (self.frame.size.height-stringRect.size.height)/2.0, stringRect.size.width, stringRect.size.height)];        }        if (show) {            [UIView animateWithDuration:0.3 animations:^{                self.frame = CGRectMake(screenWidth-self.frame.size.width,(screenHeight-self.frame.size.height)/2.0,self.frame.size.width,self.frame.size.height);            } completion:^(BOOL finished) {            }];        }else{            self.frame = CGRectMake(screenWidth-self.frame.size.width,(screenHeight-self.frame.size.height)/2.0,self.frame.size.width,self.frame.size.height);        }    });}-(void)showStatus:(NSString*)status withFlagImage:(NSString*)flagImage isLoading:(BOOL)loading{    //[[[UIApplication sharedApplication] keyWindow] setUserInteractionEnabled:NO];    [self layoutContentView];    [self setStatus:status withFlagImage:flagImage isLoading:loading isShow:YES];}-(void)dismiss:(NSTimeInterval)seconds{    self.fadeOutTimer = [NSTimer scheduledTimerWithTimeInterval:seconds target:self selector:@selector(dismiss) userInfo:nil repeats:NO];}-(void)dismiss{    //[[[UIApplication sharedApplication] keyWindow] setUserInteractionEnabled:YES];    [UIView animateWithDuration:0.3 animations:^{        self.frame = CGRectMake(screenWidth, (screenHeight-self.frame.size.height)/2.0,self.frame.size.width,self.frame.size.height);    } completion:^(BOOL finished) {        UIImageView* flag = (UIImageView*)[self viewWithTag:flagImageViewTag];        UILabel* prompt =(UILabel*)[self viewWithTag:prompteViewTag];        UIActivityIndicatorView* indicatorView = (UIActivityIndicatorView*)[self viewWithTag:indicatorViewTag];        [flag setImage:nil];        [prompt setText:nil];        [indicatorView stopAnimating];        [flag removeFromSuperview];        [prompt removeFromSuperview];        [indicatorView removeFromSuperview];        if (self.delegate && [self.delegate respondsToSelector:@selector(dismissComplete)]) {            [self.delegate dismissComplete];            self.delegate = nil;        }    }];}-(void)layoutContentView{    UIImageView* flag = [[UIImageView alloc] initWithFrame:CGRectZero];    flag.tag = flagImageViewTag;    flag.hidden = YES;    [self addSubview:flag];    [flag release];    UIActivityIndicatorView* indicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];    indicatorView.tag = indicatorViewTag;    indicatorView.hidden = YES;    [self addSubview:indicatorView];    [indicatorView release];    UILabel* prompt = [[UILabel alloc] initWithFrame:CGRectZero];    [prompt setBackgroundColor:[UIColor clearColor]];    [prompt setTextColor:[UIColor whiteColor]];    UIFont* font = [UIFont systemFontOfSize:16];    [prompt setFont:font];    [prompt setNumberOfLines:0];    [prompt setLineBreakMode:NSLineBreakByWordWrapping];    [prompt setTag:prompteViewTag];    [self addSubview:prompt];    [prompt release];}@end
0 0
原创粉丝点击