iOS开发:Toast for iPhone

 
分享一个我写的类似于android的toast的提示框

主要特点:

1,支持屏幕Y轴任意位置显示,设置距离顶/底端距离

2,支持多行文本

3,支持设置等待时间

4,支持点击隐藏,屏幕旋转时自动隐藏,淡入淡出

5,无需初始化,类方法调用

效果图:

全部代码如下,使用时需要添加QuartzCore.framework,希望能给大家带来方便。

  1. #import <Foundation/Foundation.h>
  2. #define DEFAULT_DISPLAY_DURATION 2.0f
  3. @interface OMGToast : NSObject {
  4. NSString *text;
  5. UIButton *contentView;
  6. CGFloat  duration;
  7. }
  8. + (void)showWithText:(NSString *) text_;
  9. + (void)showWithText:(NSString *) text_
  10. duration:(CGFloat)duration_;
  11. + (void)showWithText:(NSString *) text_
  12. topOffset:(CGFloat) topOffset_;
  13. + (void)showWithText:(NSString *) text_
  14. topOffset:(CGFloat) topOffset
  15. duration:(CGFloat) duration_;
  16. + (void)showWithText:(NSString *) text_
  17. bottomOffset:(CGFloat) bottomOffset_;
  18. + (void)showWithText:(NSString *) text_
  19. bottomOffset:(CGFloat) bottomOffset_
  20. duration:(CGFloat) duration_;
  21. @end
  1. #import "OMGToast.h"
  2. #import <QuartzCore/QuartzCore.h>
  3. @interface OMGToast (private)
  4. - (id)initWithText:(NSString *)text_;
  5. - (void)setDuration:(CGFloat) duration_;
  6. - (void)dismisToast;
  7. - (void)toastTaped:(UIButton *)sender_;
  8. - (void)showAnimation;
  9. - (void)hideAnimation;
  10. - (void)show;
  11. - (void)showFromTopOffset:(CGFloat) topOffset_;
  12. - (void)showFromBottomOffset:(CGFloat) bottomOffset_;
  13. @end
  14. @implementation OMGToast
  15. - (void)dealloc{
  16. [[NSNotificationCenter defaultCenter] removeObserver:self
  17. name:UIDeviceOrientationDidChangeNotification
  18. object:[UIDevice currentDevice]];
  19. [contentView release],contentView = nil;
  20. [text release],text = nil;
  21. [super dealloc];
  22. }
  23. - (id)initWithText:(NSString *)text_{
  24. if (self = [super init]) {
  25. text = [text_ copy];
  26. UIFont *font = [UIFont boldSystemFontOfSize:14];
  27. CGSize textSize = [text sizeWithFont:font
  28. constrainedToSize:CGSizeMake(280, MAXFLOAT)
  29. lineBreakMode:UILineBreakModeWordWrap];
  30. UILabel *textLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, textSize.width + 12, textSize.height + 12)];
  31. textLabel.backgroundColor = [UIColor clearColor];
  32. textLabel.textColor = [UIColor whiteColor];
  33. textLabel.textAlignment = UITextAlignmentCenter;
  34. textLabel.font = font;
  35. textLabel.text = text;
  36. textLabel.numberOfLines = 0;
  37. contentView = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, textLabel.frame.size.width, textLabel.frame.size.height)];
  38. contentView.layer.cornerRadius = 5.0f;
  39. contentView.layer.borderWidth = 1.0f;
  40. contentView.layer.borderColor = [[UIColor grayColor] colorWithAlphaComponent:0.5].CGColor;
  41. contentView.backgroundColor = [UIColor colorWithRed:0.2f
  42. green:0.2f
  43. blue:0.2f
  44. alpha:0.75f];
  45. [contentView addSubview:textLabel];
  46. contentView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
  47. [contentView addTarget:self
  48. action:@selector(toastTaped:)
  49. forControlEvents:UIControlEventTouchDown];
  50. contentView.alpha = 0.0f;
  51. [textLabel release];
  52. duration = DEFAULT_DISPLAY_DURATION;
  53. [[NSNotificationCenter defaultCenter] addObserver:self
  54. selector:@selector(deviceOrientationDidChanged:)
  55. name:UIDeviceOrientationDidChangeNotification
  56. object:[UIDevice currentDevice]];
  57. }
  58. return self;
  59. }
  60. - (void)deviceOrientationDidChanged:(NSNotification *)notify_{
  61. [self hideAnimation];
  62. }
  63. -(void)dismissToast{
  64. [contentView removeFromSuperview];
  65. }
  66. -(void)toastTaped:(UIButton *)sender_{
  67. [self hideAnimation];
  68. }
  69. - (void)setDuration:(CGFloat) duration_{
  70. duration = duration_;
  71. }
  72. -(void)showAnimation{
  73. [UIView beginAnimations:@"show" context:NULL];
  74. [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
  75. [UIView setAnimationDuration:0.3];
  76. contentView.alpha = 1.0f;
  77. [UIView commitAnimations];
  78. }
  79. -(void)hideAnimation{
  80. [UIView beginAnimations:@"hide" context:NULL];
  81. [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
  82. [UIView setAnimationDelegate:self];
  83. [UIView setAnimationDidStopSelector:@selector(dismissToast)];
  84. [UIView setAnimationDuration:0.3];
  85. contentView.alpha = 0.0f;
  86. [UIView commitAnimations];
  87. }
  88. - (void)show{
  89. UIWindow *window = [UIApplication sharedApplication].keyWindow;
  90. contentView.center = window.center;
  91. [window  addSubview:contentView];
  92. [self showAnimation];
  93. [self performSelector:@selector(hideAnimation) withObject:nil afterDelay:duration];
  94. }
  95. - (void)showFromTopOffset:(CGFloat) top_{
  96. UIWindow *window = [UIApplication sharedApplication].keyWindow;
  97. contentView.center = CGPointMake(window.center.x, top_ + contentView.frame.size.height/2);
  98. [window  addSubview:contentView];
  99. [self showAnimation];
  100. [self performSelector:@selector(hideAnimation) withObject:nil afterDelay:duration];
  101. }
  102. - (void)showFromBottomOffset:(CGFloat) bottom_{
  103. UIWindow *window = [UIApplication sharedApplication].keyWindow;
  104. contentView.center = CGPointMake(window.center.x, window.frame.size.height-(bottom_ + contentView.frame.size.height/2));
  105. [window  addSubview:contentView];
  106. [self showAnimation];
  107. [self performSelector:@selector(hideAnimation) withObject:nil afterDelay:duration];
  108. }
  109. + (void)showWithText:(NSString *)text_{
  110. [OMGToast showWithText:text_ duration:DEFAULT_DISPLAY_DURATION];
  111. }
  112. + (void)showWithText:(NSString *)text_
  113. duration:(CGFloat)duration_{
  114. OMGToast *toast = [[[OMGToast alloc] initWithText:text_] autorelease];
  115. [toast setDuration:duration_];
  116. [toast show];
  117. }
  118. + (void)showWithText:(NSString *)text_
  119. topOffset:(CGFloat)topOffset_{
  120. [OMGToast showWithText:text_  topOffset:topOffset_ duration:DEFAULT_DISPLAY_DURATION];
  121. }
  122. + (void)showWithText:(NSString *)text_
  123. topOffset:(CGFloat)topOffset_
  124. duration:(CGFloat)duration_{
  125. OMGToast *toast = [[[OMGToast alloc] initWithText:text_] autorelease];
  126. [toast setDuration:duration_];
  127. [toast showFromTopOffset:topOffset_];
  128. }
  129. + (void)showWithText:(NSString *)text_
  130. bottomOffset:(CGFloat)bottomOffset_{
  131. [OMGToast showWithText:text_  bottomOffset:bottomOffset_ duration:DEFAULT_DISPLAY_DURATION];
  132. }
  133. + (void)showWithText:(NSString *)text_
  134. bottomOffset:(CGFloat)bottomOffset_
  135. duration:(CGFloat)duration_{
  136. OMGToast *toast = [[[OMGToast alloc] initWithText:text_] autorelease];
  137. [toast setDuration:duration_];
  138. [toast showFromBottomOffset:bottomOffset_];
  139. }
  140. @end

可以这样来使用

  1. [OMGToast showWithText:@"中间显示" duration:5];
  2. [OMGToast showWithText:@"距离上方50像素" topOffset:50 duration:5];
  3. [OMGToast showWithText:@"文字很多的时候,我就会自动折行,最大宽度280像素" topOffset:100 duration:5];
  4. [OMGToast showWithText:@"加入\\n也可以\n显示\n多\n行" topOffset:300 duration:5];
  5. [OMGToast showWithText:@"距离下方3像素" bottomOffset:3 duration:5];
 
 
 

iOS开发:Toast for iPhone的更多相关文章

  1. iOS开发点滴:iPhone屏幕适配

    最近开始做iOS开发,遇到一些小问题和解决方法,记录下.   今天是iPhone屏幕适配 iPhone5出来之后屏幕就有iPhone就有了2种尺寸:3.5寸和4寸,xcode 5 的IB设计器里面界面 ...

  2. iOS开发:判断iPhone是否是刘海屏iPhoneX、iPhoneXR、iPhoneXs、iPhoneXs Max等

    保证能判断,呕心沥血,不行切JIJI 方法一 Objective-C // iPhoneX.iPhoneXR.iPhoneXs.iPhoneXs Max等 // 判断刘海屏,返回YES表示是刘海屏 - ...

  3. ios开发介绍

    iOS开发概述 •什么是IOS •什么是IOS开发 •为什么要选择IOS开发 •学习IOS开发的准备   1.什么是iOS   •iOS是一款由苹果公司开发的操作系统(OS是Operating Sys ...

  4. ios新手开发——toast提示和旋转图片加载框

    不知不觉自学ios已经四个月了,从OC语法到app开发,过程虽然枯燥无味,但是结果还是挺有成就感的,在此分享我的ios开发之路中的小小心得~废话不多说,先上我们今天要实现的效果图: 有过一点做APP经 ...

  5. iOS开发UI篇—iPad和iPhone开发的比较

    一.iPad简介 1.什么是iPad 一款苹果公司于2010年发布的平板电脑 定位介于苹果的智能手机iPhone和笔记本电脑产品之间 跟iPhone一样,搭载的是iOS操作系统 2.iPad的市场情况 ...

  6. iOS开发---iPhone SDK 包含哪些东西?

    第一部分: 在使用Intel芯片的Macintosh计算机开发iOS应用程序所需的全部接口.工具以及资源全都包含于iPhone SDK. 苹果公司将大部分系统接口发布在框架这种特殊的数据包.一个框架就 ...

  7. IOS开发/iphone开发多线程

    有时候可能有很多功能要同时实现,例如每隔多长时间就会检测程序网络连接,又或者有时候需要从服务器下载一个不小的文件,如果用单线程几乎是不可想的事情,程序将会卡的无法使用,用到多线程和不用多线程,给用户的 ...

  8. 【转】iOS开发UI篇—iPad和iPhone开发的比较

    原文网址:http://www.cnblogs.com/wendingding/p/3918007.html iOS开发UI篇—iPad和iPhone开发的比较 一.iPad简介 1.什么是iPad ...

  9. IOS开发系列之阿堂教程:玩转IPhone客户端和Web服务端交互(客户端)实践

    说到ios的应用开发,我们不能不提到web server服务端,如果没有服务端的支持,ios应用开发就没有多大意义了,因为从事过手机开发的朋友都知道(Android也一样),大量复杂业务的处理和数据库 ...

随机推荐

  1. 刷题总结——work(ssoj)

    题目: 题目背景 SOURCE:NOIP2015-SHY-5 题目描述 假设现在离 noip 还有 m 天,有 n 个人要去参加比赛.他们每个人都有一个预定的训练量 r[i] ,所以每一天他们都抓紧时 ...

  2. 使用router.push()进行页面跳转的问题

    看着官网的文档直接router.push()这样会报错router undefind,需要写成this.$router.push()才可以

  3. Springboot 版本+ jdk 版本 + Maven 版本的匹配

    Spring boot 版本 Spring Framework jdk 版本 maven 版本 1.2.0 版本之前 6 3.0 1.2.0 4.1.3+ 6 3.2+ 1.2.1 4.1.3+ 7 ...

  4. bzoj 2799 [Poi2012]Salaries 性质+二分

    题目大意 给出一棵n个结点的有根树,结点用正整数1~n编号. 每个结点有一个1~n的正整数权值,不同结点的权值不相同, 并且一个结点的权值一定比它父结点的权值小(根结点的权值最大,一定是n). 现在有 ...

  5. mysql 初始化脚本

    脚本须知: 1. 确认mysql的数据目录,二进制日志目录,中继日志的目录,安装目录的位置 2. 初始化会对前三个目录执行清空操作,不过清空前该脚本对其进行了压缩打包统一存放在/tmp目录下 3. 脚 ...

  6. Spring MVC学习一

    SpringMVC是一个基于DispatcherServlet的MVC框架,每一个请求最先访问的都是DispatcherServlet,DispatcherServlet负责转发每一个Request请 ...

  7. vs2017秘钥

    VS2017专业版和企业版激活密钥 需要的请自取- Enterprise: NJVYC-BMHX2-G77MM-4XJMR-6Q8QF Professional: KBJFW-NXHK6-W4WJM- ...

  8. CodeForces - 600F Edge coloring of bipartite graph

    Discription You are given an undirected bipartite graph without multiple edges. You should paint the ...

  9. 想用idea的update classes and resources找不到了,热部署无法使用

    发现为了方便调试页面,想用idea的update classes and resources找不到了,发现需要把deployment选择exploded 的那个war包,才能在service--> ...

  10. 结构体和类中属性定义需要static地方

    private function Readxxx:Integer;static; public class property XXX:Integer read ReadXXx; Txxx =recor ...