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. 树状数组--前n项和;

    树状数组是和线段树类似的数据结构,基本上树状数组可以做的线段树都可以做: 树状数组就是一个数组,在信息记录上有一些特点,以动态求前n项和为例:可以改变数组的某一个元素,求前n项和: 数组tree[ i ...

  2. ACM程序设计选修课——1024: 末位零(求末尾0的方法+可有可无的快速幂)

    1024: 末位零 Time Limit: 1 Sec  Memory Limit: 32 MB Submit: 60  Solved: 11 [Submit][Status][Web Board] ...

  3. 算法复习——矩阵树定理(spoj104)

    题目: In some countries building highways takes a lot of time... Maybe that's because there are many p ...

  4. IE8,11的iframe高度自适应

    兼容模式:function iFrameHeightTzinfo() { var ifm= document.getElementById("iframe_tzinfo"); // ...

  5. IOs动画的那些事儿

    CoreAnimation介绍 1:Core Animation是直接作用在CALayer上的(并非UIView上)非常强大的跨Mac OS X和iOS平台的动画处理API,Core Animatio ...

  6. 转 Python爬虫入门三之Urllib库的基本使用

    静觅 » Python爬虫入门三之Urllib库的基本使用 1.分分钟扒一个网页下来 怎样扒网页呢?其实就是根据URL来获取它的网页信息,虽然我们在浏览器中看到的是一幅幅优美的画面,但是其实是由浏览器 ...

  7. vue 权限控制按钮3种样式、内容、以及跳转事件

    最近碰到一个因为要根据权限来给一个按钮变成不同功能, 简单写出3个按钮然后用v-if也能实现这个功能,但是在加载页面时,如果延迟过高则会把按钮按照DOM顺序加载出来,这是个很不好的效果 思索了下,把三 ...

  8. Codeforces 877E Danil and a Part-time Job(dfs序 + 线段树)

    题目链接   Danil and a Part-time Job 题意    给出一系列询问或者修改操作 $pow$ $x$表示把以$x$为根的子树的所有结点的状态取反($0$变$1$,$1$变$0$ ...

  9. jenkins配置Maven的私有仓库Nexus

    1.什么是nexus? Neux:MAVEN的私有仓库; 如果没有私服,我们所需的所有构件都需要通过maven的中央仓库和第三方的Maven仓库下载到本地,而一个团队中的所有人都重复的从maven仓库 ...

  10. SQL 列转行与行转列

    假设有张学生成绩表(tb)如下:Name Subject Result张三 语文 74张三 数学 83张三 物理 93李四 语文 74李四 数学 84李四 物理 94*/ -------------- ...