博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS下的类似Android的toast提示
阅读量:6502 次
发布时间:2019-06-24

本文共 4351 字,大约阅读时间需要 14 分钟。

一般人会说,就是用那个MBProgressHUD不就行了吗?

的确是,MBProgressHUD能为我们做了好多loading指示器,但是toast不一样,它是在屏幕某个地方出现一行小提示,例如网络状态,出现的时候不会妨碍用户其他点击操作,只是MBProgressHUD它本身设计出发点并不如此,所以我介绍一个比较独特的开源文件。

先看头文件

#import 
#define kSGInfoAlert_fontSize 14#define kSGInfoAlert_width 200#define kMax_ConstrainedSize CGSizeMake(250, 150)#define kViewTag 990@interface SGInfoAlert : UIView{ CGColorRef bgcolor_; NSString *info_; CGSize fontSize_;}// info为提示信息,frame为提示框大小,view是为消息框的superView(推荐Tabbarcontroller.view)// vertical 为垂直方向上出现的位置 从 取值 0 ~ 1。+ (SGInfoAlert *)showInfo:(NSString*)info bgColor:(CGColorRef)color inView:(UIView*)view vertical:(float)height;@end

再看.m文件

#import "SGInfoAlert.h"@implementation SGInfoAlert// 画出圆角矩形背景static void addRoundedRectToPath(CGContextRef context, CGRect rect,                                 float ovalWidth,float ovalHeight){    float fw, fh;    if (ovalWidth == 0 || ovalHeight == 0) {         CGContextAddRect(context, rect);        return;    }    CGContextSaveGState(context);     CGContextTranslateCTM (context, CGRectGetMinX(rect),                            CGRectGetMinY(rect));    CGContextScaleCTM (context, ovalWidth, ovalHeight);     fw = CGRectGetWidth (rect) / ovalWidth;     fh = CGRectGetHeight (rect) / ovalHeight;     CGContextMoveToPoint(context, fw, fh/2);     CGContextAddArcToPoint(context, fw, fh, fw/2, fh, 1);     CGContextAddArcToPoint(context, 0, fh, 0, fh/2, 1);     CGContextAddArcToPoint(context, 0, 0, fw/2, 0, 1);     CGContextAddArcToPoint(context, fw, 0, fw, fh/2, 1);     CGContextClosePath(context);     CGContextRestoreGState(context); }- (id)initWithFrame:(CGRect)frame bgColor:(CGColorRef)color info:(NSString*)info{    CGRect viewR = CGRectMake(0, 0, frame.size.width*1.2, frame.size.height*1.2);    self = [super initWithFrame:viewR];    if (self) {        self.backgroundColor = [UIColor clearColor];        bgcolor_ = color;        info_ = [[NSString alloc] initWithString:info];        fontSize_ = frame.size;    }    return self;}- (void)drawRect:(CGRect)rect{    CGContextRef context = UIGraphicsGetCurrentContext();    // 背景0.8透明度    CGContextSetAlpha(context, .8);    addRoundedRectToPath(context, rect, 4.0f, 4.0f);    CGContextSetFillColorWithColor(context, bgcolor_);    CGContextFillPath(context);        // 文字1.0透明度    CGContextSetAlpha(context, 1.0);//    CGContextSetShadowWithColor(context, CGSizeMake(0, -1), 1, [[UIColor whiteColor] CGColor]);    CGContextSetFillColorWithColor(context, [UIColor flatPurpleColor].CGColor);    float x = (rect.size.width - fontSize_.width) / 2.0;    float y = (rect.size.height - fontSize_.height) / 2.0;    CGRect r = CGRectMake(x, y, fontSize_.width, fontSize_.height);    [info_ drawInRect:r withFont:[UIFont systemFontOfSize:kSGInfoAlert_fontSize] lineBreakMode:UILineBreakModeTailTruncation];}//- (void)dealloc{//    [info_ release];//    [super dealloc];//}// 从上层视图移除并释放- (void)remove{    [self removeFromSuperview];}// 渐变消失- (void)fadeAway{    [UIView beginAnimations:nil context:nil];    [UIView setAnimationDuration:1.5f];    self.alpha = .0;    [UIView commitAnimations];    [self performSelector:@selector(remove) withObject:nil afterDelay:1.5f];}+ (SGInfoAlert *)showInfo:(NSString *)info         bgColor:(CGColorRef)color          inView:(UIView *)view         vertical:(float)height{    if ([view viewWithTag:kViewTag] != nil) {        SGInfoAlert *alert = (SGInfoAlert *)[view viewWithTag:kViewTag];        [alert remove];    }    height = height < 0 ? 0 : height > 1 ? 1 : height;    CGSize size = [info sizeWithFont:[UIFont systemFontOfSize:kSGInfoAlert_fontSize]                   constrainedToSize:kMax_ConstrainedSize];    CGRect frame = CGRectMake(0, 0, size.width, size.height);    SGInfoAlert *alert = [[SGInfoAlert alloc] initWithFrame:frame bgColor:color info:info];    alert.center = CGPointMake(view.center.x, view.frame.size.height*height);    alert.alpha = 0;    [view addSubview:alert];    alert.tag = kViewTag;//    [alert release];    [UIView beginAnimations:nil context:nil];    [UIView setAnimationDuration:.3f];    alert.alpha = 1.0;    [UIView commitAnimations];//    [alert performSelector:@selector(fadeAway) withObject:nil afterDelay:3.5];    return alert;}

我注销了一些地方,使得它可以在ARC环境下使用

 

 

转载于:https://www.cnblogs.com/nathanou/p/3273058.html

你可能感兴趣的文章
ThinkPHP 框架学习
查看>>
css3箭头效果
查看>>
MathType在手,公式不求人!
查看>>
测试用例设计
查看>>
三层架构
查看>>
Python变量类型(l整型,长整形,浮点型,复数,列表,元组,字典)学习
查看>>
解决方案(.sln)文件
查看>>
【Treap】bzoj1588-HNOI2002营业额统计
查看>>
第六周作业
查看>>
利用ZYNQ SOC快速打开算法验证通路(5)——system generator算法IP导入IP integrator
查看>>
指针和引用的区别
查看>>
运行PHP出现No input file specified错误解决办法
查看>>
【重建】从FJOI2016一试谈起
查看>>
selenium之frame操作
查看>>
php 引入其他文件中的变量
查看>>
MYSQL体系结构-来自期刊
查看>>
mysql的基本知识
查看>>
webpack入门(二)what is webpack
查看>>
UnitOfWork以及其在ABP中的应用
查看>>
学习C语言必须知道的理论知识(第一章)
查看>>