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. BZOJ 3167 [Heoi2013]Sao ——树形DP

    BZOJ4824的强化版. 改变枚举的方案,使用前缀和进行DP优化. 然后复杂度就是$O(n^2)$了. #include <map> #include <cmath> #in ...

  2. wireshark推荐书籍

    1 wireshark数据包分析实战 有中文版 2 wireshark网络分析 英文版 3 TCP/IP协议栈详解卷一

  3. 【NOIP2015】信息传递(强连通分量)

    题意:找一张图中的最小环 O(n) 思路:强连通分量tarjan即可 注意环中节点数>1 ..]of longint; n,i,ans,tot,id,top,time,x:longint; pr ...

  4. 标准C程序设计七---64

    Linux应用             编程深入            语言编程 标准C程序设计七---经典C11程序设计    以下内容为阅读:    <标准C程序设计>(第7版) 作者 ...

  5. BZOJ——2134: 单选错位

    http://www.lydsy.com/JudgeOnline/problem.php?id=2134 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: ...

  6. 平衡树与可持久化treap

    平衡树(二叉树) 线段树不支持插入or删除一个数于是平衡树产生了 常见平衡树:treap(比sbt慢,好写吧),SBT(快,比较好写,有些功能不支持),splay(特别慢,复杂度当做根号n来用,功能强 ...

  7. SnakeYaml使用

    新的项目中需要将yaml文件解析为对象,调研了决定使用snakeYaml,下面看一看怎么使用. 一.引入依赖 因为项目是使用maven构建的,所以我们在pom文件中引入snakeYaml的依赖,如下: ...

  8. Linux下快速删除输错的密码技巧(快速删除输入的命令)

    1.[Esc]+[退格键(Backspace)] 2.[Ctrl]+[U] 说明:以上两个快捷键都会删除全部输错的命令或密码. 参考: http://blog.csdn.net/u013895662/ ...

  9. android TextView 设置字体大小

    package com.example.yanlei.yl4; import android.graphics.Color;import android.os.Bundle;import androi ...

  10. golang 版本升降之后报错——imports runtime: C source files not allowed when not using cgo or SWIG

    问题: golang 升级或者降级版本之后,执行编译报错如下: package github.com/onsi/ginkgo/ginkgo imports runtime: C source file ...