共享一个右侧滑出的自动消失的提示框
2016-07-03 11:16
423 查看
这个控件是三年前我在亚信集团工作的时候开发,今天趴出来,顺便修改一下支持最新的版本的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
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- jQuery实现摸拟alert提示框
- 基于BootStrap Metronic开发框架经验小结【六】对话框及提示框的处理和优化
- js弹出框、对话框、提示框、弹窗实现方法总结(推荐)
- 在ASP.NET使用JavaScript显示信息提示窗口实现原理及代码
- jQuery实现信息提示框(带有圆角框与动画)效果
- jquery插件珍藏(图片局部放大/信息提示框)
- 三种带箭头提示框总结实例
- javascript实现确定和取消提示框效果
- js右下角弹出提示框示例代码
- JS组件Bootstrap实现弹出框和提示框效果代码
- jquery悬浮提示框完整实例
- 关闭浏览器窗口弹出提示框并且可以控制其失效
- 讲解iOS开发中基本的定位功能实现