当前位置: 首页 > 编程日记 > 正文

iOS下的类似Android的toast提示

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

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

先看头文件

#import <Foundation/Foundation.h>#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*)infobgColor:(CGColorRef)colorinView:(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 *)infobgColor:(CGColorRef)colorinView:(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

相关文章:

配置Activiti Explorer使用MYSQL

http://blog.csdn.net/lxxxzzl/article/details/39583977

初学者SQL语句介绍

初学者SQL语句介绍 1.用 Select 子句检索记录 Select 子句是每一个检索数据的查询核心。它告诉数据库引擎返回什么字段。 Select 子句的常见形式是&#xff1a; Select * 该子句的意思是“返回在所指定的记录源中能找到的所有字段”。这种命令形式很方便&#xff…

转型AI成功几率有几分?太真实了......

技术转型&#xff0c;这两年一直是程序员圈子里的热门话题。对于大部分基层程序员来说&#xff0c;基础岗位上薪资的涨幅很难跟上年龄的增长。而近些年&#xff0c;AI技术发展势头迅猛&#xff0c;优秀人才短缺。在这种情况下&#xff0c;无疑是谁先转型成功&#xff0c;谁就占…

如何使用聚簇索引

2019独角兽企业重金招聘Python工程师标准>>> 聚簇索引是一种对磁盘上实际数据重新组织以按指定的一个或多个列的值排序。由于聚簇索引的索引页面指针指向数据页面&#xff0c;所以使用聚簇索引查找数据几乎 总是比使用非聚簇索引快。每张表只能建一个聚簇索引&#…

C语言实现汉诺塔问题

代码如下&#xff1a; #include <stdio.h> #include <stdlib.h> void move(int n,char x,char y,char z) {if (n1) {printf("%c--->%c\n",x,z);}else {move(n-1,x,z,y);printf("%c--->%c\n",x,z);move(n-1,y,x,z);} } int main() {int n…

将Session值储存于SQL Server中

一般情况下&#xff0c;我们喜欢使用Session储存我们的变量。Asp.Net提供了下面一些方法储存Session的值&#xff1a; InProc State Server SQL Server “InProc”表示我们使用传统ASP一样的方法储存Session的值&#xff0c;而且“State Server”则表示使用另外一台主机来…

系统定时关机的方法

曾经在网上搜索过关于windows XP定时关机的方法&#xff0c;很多人都说下载一个定时关机的软件。其实根本不需要这么麻烦&#xff0c;windowsXP本身就自带有定时关机这个功能&#xff0c;而且有两种方法。方法一&#xff1a;使用at命令(1)"开始"->"运行"…

让线上学习不打折扣,作业帮如何用技术促进课堂高频互动场?

“在大班直播课上&#xff0c;可能有数千甚至上万学员同时上课&#xff0c;但是他们彼此看不见也听不见&#xff0c;是千千万万个‘孤独的个体’&#xff0c;而‘小组直播间’却可以让他们随时随刻感觉到自己置身于一个温暖的集体之中。” “小组直播间”是曹越一直主张在大班…

在python中调用js或者nodejs要使用PyExecJs第三方包。

在python中调用js或者nodejs要使用PyExecJs第三方包。 使用时&#xff1a;import execjs这是没有用到nodejs的情况&#xff1b;如果用到nodejs&#xff0c;这种写法会报“Cannot find module xxx”的错误。 如果要用nodejs&#xff0c;要在环境变量中指定node_modules的路径。转…

超越Google,快手落地业界首个万亿参数推荐精排模型

整理 | 兆雨 责编 | 阿司匹林 出品 | AI科技大本营 精准的推荐系统模型是很多互联网产品的核心竞争力&#xff0c;个性化推荐系统旨在根据用户的行为数据提供“定制化”的产品体验。国民级短视频App快手&#xff0c;每天为数亿用户推荐百亿的视频&#xff0c;遇到的挑战之一是推…

Cache总义Cache用法之页面声明

Cache总义Cache用法之页面声明 <% outputCacheDuration"#ofseconds"Location"Any|Client|Downstream|Server|None"VaryByControl"ControlName"VaryByCustom"browser|customstring"VaryByHeader"headers"VaryByParam&quo…

InfBox V7.0 企业绩效助手客户端使用简介

1&#xff0c;点击此处下载InfBox V7.0 客户端软件。2&#xff0c;把下载下来的InfBox.rar压缩包&#xff0c;加压缩到E盘&#xff0c;解压后的目录如下&#xff1a;3&#xff0c;双击运行infbox.exe文件&#xff0c;点击登录窗口的左下角配置图标&#xff0c;设置服务器IP地址…

iOS:转载:UIControl的使用

主要功能&#xff1a; UIContol&#xff08;控件是所有控件的基类 如&#xff1a;&#xff08;UIButton&#xff09;按钮主要用于与用户交互&#xff0c;通常情况下我们不会直接使用UIControl&#xff0c;而是子类化它。常用属性&#xff1a; BOOL enabled 空间默认是启用的&am…

fprintf、printf、sprintf、fscanf、scanf、sscanf 格式化输入输出

格式化输入输出 1. fprintf&#xff08;格式化输出数据至文件&#xff09; 相关函数 printf&#xff0c;fscanf&#xff0c;vfprintf 表头文件 #include<stdio.h> 定义函数 int fprintf(FILE * stream, const char * format,.......); 函数说明 fprint…

毕业后五年之内将决定你的一生

大家千万不要错过这篇文章&#xff0c;毕业2年多了&#xff0c;能看到这篇文章也是一种幸运&#xff0c;真的受益匪浅&#xff0c;对我有很大启迪&#xff0c;这篇文章将会改变我的一生&#xff0c;真的太好了&#xff0c;希望与有缘人分享&#xff0c;也希望对有缘人有所帮助&…

达沃斯议程对话会:张亚勤解读人工智能发展 3R 原则

在国内外新冠疫情持续的特殊形势下&#xff0c;2021年世界经济论坛“达沃斯议程”对话会于1月25日至29日以线上形式举行。此次论坛上&#xff0c;全球70多个国家和地区的1500多位政商界和社会组织领导人围绕“把握关键之年&#xff0c;重建各方信任”这一主题&#xff0c;就如何…

The note of Developing Innovative Ideas for New Companies Course

This course is free on the Coursera Site&#xff0c;But it only has English version Threee pieces of the course overview&#xff1a; 1、opportunity analysis Canvas 2、business model Canvas&#xff1a;执行与验证 3、business plan 1.3&#xff1a; By first und…

C语言的一个关键字——static

C语言的一个关键字——static Static在C语言里面有两个作用&#xff0c;第一个是修饰变量&#xff0c;第二个是修饰函数。 1、Static修饰变量 按照作用范围的不同&#xff0c;变量分为局部变量和全局变量。如果用static修饰变量&#xff0c;不论这个变量是全局的还是局部的都是…

Android常用URI收藏

http://www.android-study.com/jichuzhishi/338.html转载于:https://www.cnblogs.com/hyzhou/p/3286550.html

Teradata推出Vantage on Azure,可实现自助配置、快速部署,提供安全、可扩展的高性能分析

云数据分析平台公司Teradata今日宣布推出全新Teradata Vantage on Azure 服务&#xff0c;帮助客户在部署其Teradata Vantage 环境时&#xff0c;将Vantage的强大功能与Microsoft Azure 基础架构的敏捷性和灵活性更好地结合&#xff0c;以更轻松地成为具有一流分析能力的数据驱…

布巴内斯瓦尔成智慧城市 印小城何以“智慧”

在2月14日举行的布巴内斯瓦尔市“智慧生活日”活动中&#xff0c;学生们集体练习瑜伽。 核心阅读 印度打造百座“智慧城市”计划日前取得阶段性成果&#xff0c;综合评分领先的20座城市成为今后5年印度城市发展首批资助对象。 位于印度东部奥里萨邦的布巴内斯瓦尔市在本次评选中…

摘自一个读者读后rework的感受

2019独角兽企业重金招聘Python工程师标准>>> 读了《Rework》这本书好多遍&#xff0c;每次读都有不同的感想。但从来没有把这些感想记录下来&#xff0c;今天把《Rework》书中的一些章节做一些摘录&#xff0c;并把我的一些感想总结出来。供大家参考。这是一本平生以…

web.config文件详解

(一).Web.Config是以XML文件规范存储,配置文件分为以下格式 1.配置节处理程序声明 特点&#xff1a; 位于配置文件的顶部&#xff0c;包含在<configSections>标志中。 2.特定应用程序配置 特点: 位于<appSetting>中。 可以定义应用程序的全局常量…

Go 语言这一年

作者 | 白明 责编 | 张文来源 | 本文转载自 TonyBai题图 | 自视觉中国2020&#xff0c;这一六十年一遇的庚子年的确“名不虚传”。在这一年发生了很多事&#xff0c;而最受瞩目的事情莫过于新冠疫情的全球大流行。疫情给全球的经济带来了近似毁灭性的打击&#xff0c;给人们的…

JMeter入门(1):JMeter总体介绍及组件介绍

一、JMeter概述JMeter就是一个测试工具&#xff0c;相比于LoadRunner等测试工具&#xff0c;此工具免费&#xff0c;且比较好用&#xff0c;但是前提当然是安装Java环境&#xff1b;JMeter可以做(1)压力测试及性能测试&#xff1b;(2)数据库测试&#xff1b;(3)Java程序的测试&…

在Linux平台上如何使用接静态库和共享库

1、Linux函数库介绍 函数库可以看做是事先编写的函数集合&#xff0c;它可以与主函数分离&#xff0c;从而增加程序开发的复用性。Linux中函数库可以有3种使用的形式&#xff1a;静态、共享和动态。 1) 静态库的代码在编译时就已连接到开发人员开发的应用程序中&#x…

GSA+麦肯锡开年首场线上活动:汽车半导体要变天?

作者 | 白露 . L来源 | GSA全球半导体联盟首场GSA主办的行业活动将于2月初拉开序幕。本次线上研讨会聚焦汽车行业&#xff0c;将于北京时间2021年2月12日举行&#xff0c;是GSA与麦肯锡公司&#xff08;McKinsey&#xff06;Company&#xff09;合作的自动驾驶时代的半导体项目…

poj 1185(状压dp)

题目链接&#xff1a;http://poj.org/problem?id1185 思路&#xff1a;状态压缩经典题目&#xff0c;dp[i][j][k]表示第i行状态为j,(i-1)行状态为k时最多可以放置的士兵个数&#xff0c;于是我们可以得到递推方程&#xff1a;dp[i][j][k]max(dp[i][j][k],dp[i-1][k][l]num[j])…

存储能否导致ESXi网络性能问题?

管理员应该如何判断存储是否能够引起ESXi服务器当中的网络性能问题呢? 虚拟机非常依赖存储资源&#xff0c;因此如果存储产生的延迟过大&#xff0c;那么会在一定程度上导致虚拟机糟糕的性能表现。幸运的是&#xff0c;虚拟化管理可以使用多种可用工具和策略来诊断潜在的存储问…

ASP.NET2.0中的ClientScriptManager 类用法—如何添加客户端事件!

在ASP.NET2.0中&#xff0c;ClientScriptManager 类通过键 String 和 Type 唯一地标识脚本。具有相同的键和类型的脚本被视为重复脚本。因此&#xff0c;我们可以使用脚本类型来避免混淆可能用在页中的来自不同用户控件的相似脚本。 <html><head><title>Cli…