共享一个右侧滑出的自动消失的提示框
来源:互联网 发布:淘宝网李宁 编辑:程序博客网 时间: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
- 共享一个右侧滑出的自动消失的提示框
- 弹出一个淡入淡出的提示框,且自动消失
- 可以自动消失的弹出提示框
- 提示框自动消失
- iOS中消息框提示的出现与自动消失
- iOS中自动消失提示框的实现
- iOS中自动消失提示框的实现
- XZ_iOS之自定义2秒钟自动消失的提示框
- 自动消失的小提示-结合xib
- 显示一个提示框,几秒后显示框自动消失
- 封装一个Ext消息提示框,显示几秒后自动消失
- UIAlertView提示框自动消失
- iOS自动消失提示框
- 消失的共享锁
- 自动消失的alert框
- Extjs自动提示消失提示框
- Flex Alert出一个带超链接的提示框
- Flex Alert出一个带超链接的提示框(转)
- Python 语言及其应用 Chapter_4_Note_4 装饰器
- linux简单几个小命令
- elasticsearch Java
- linux进程及进程查看ps命令
- 面试题25:二叉树中和为某一值的路径
- 共享一个右侧滑出的自动消失的提示框
- 事件处理机制之监听EditText的内容变化
- springmvc的Controller并发
- 关于建站和域名的杂谈
- 141. Linked List Cycle
- SQL Server 对XML数据功能支持
- h5+css 水平菜单制作
- 【bzoj2055】【80人环游世界】【有上下界的费用流】
- 多重继承与void*指针转换问题的分析