iOS开发:Toast for iPhone 实例分享

转载 2015年07月09日 17:35:26
分享一个我写的类似于android的toast的提示框

主要特点:

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

2,支持多行文本

3,支持设置等待时间

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

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


效果图:




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

  1. #import <Foundation/Foundation.h>  
  2.   
  3. #define DEFAULT_DISPLAY_DURATION 2.0f  
  4.   
  5. @interface OMGToast : NSObject {  
  6.     NSString *text;  
  7.     UIButton *contentView;  
  8.     CGFloat  duration;  
  9. }  
  10.   
  11. + (void)showWithText:(NSString *) text_;  
  12. + (void)showWithText:(NSString *) text_  
  13.             duration:(CGFloat)duration_;  
  14.   
  15. + (void)showWithText:(NSString *) text_  
  16.            topOffset:(CGFloat) topOffset_;  
  17. + (void)showWithText:(NSString *) text_  
  18.            topOffset:(CGFloat) topOffset  
  19.             duration:(CGFloat) duration_;  
  20.   
  21. + (void)showWithText:(NSString *) text_  
  22.         bottomOffset:(CGFloat) bottomOffset_;  
  23. + (void)showWithText:(NSString *) text_  
  24.         bottomOffset:(CGFloat) bottomOffset_  
  25.             duration:(CGFloat) duration_;  
  26.   
  27. @end  


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

iOS开发之类似安卓的Toast短暂提示框

向凡神致敬~ 在Android中具有确认提示框与短暂提示框Toast,但在iOS中只有确认提示框Alert并无类似于Android的短暂提示框Toast。 注:使用此组件控制器...
  • WJP19930121
  • WJP19930121
  • 2016年05月26日 14:58
  • 1239

ios--Toast for iPhone(实例分享)

原文转自:http://blog.csdn.net/iBright/article/details/7078436 分享一个我写的类似于android的toast的提示框 主要特点...
  • wanggsx20080817
  • wanggsx20080817
  • 2014年03月20日 10:54
  • 1397

微信分享调用jssdk实例

0、上demo,补充一点小问题按照之前的思路,发现一直签名失败,我查了半天,发现是url那地方有问题。通过api获取时,签名的url默认获取的是接口的api地址,比较纳闷。后来我在请求时加入了当前网址...
  • zyq527758142
  • zyq527758142
  • 2017年06月08日 16:12
  • 757

IOS-- toast提示框(MBProgressHUD)

MBProgressHUD是一个开源项目,实现了很多种样式的提示框 https://github.com/jdg/MBProgressHUD,下载下来后直接把MBProgressHUD.h和MB...
  • qq_17007915
  • qq_17007915
  • 2015年12月08日 11:28
  • 1102

ios Instagram 分享

http://stackoverflow.com/questions/11393071/how-to-share-an-image-on-instagram-in-ios -(void)...
  • ssyyjj88
  • ssyyjj88
  • 2016年05月17日 16:25
  • 1394

android全局Toast

package com.igeak.sync.util; import android.annotation.SuppressLint; import android.content.Context...
  • luck_apple
  • luck_apple
  • 2013年08月09日 14:17
  • 3811

Weex例子——Toast

Weex Toast:不知道官方提供的toast是什么鬼,所以就简单写了一个。
  • ALISURE
  • ALISURE
  • 2017年01月14日 22:13
  • 1453

iOS开发-系统级分享

最近开发用到了系统级的分享,当然,一般来说有很好的第三方,我们是不会直接来用系统级的分享的,那系统级别的分享怎么用呢?博主看了网上的一些东西,无非都是UIActivityViewController或...
  • CodingFire
  • CodingFire
  • 2016年03月29日 09:42
  • 982

iOS开发--------屏幕尺寸适配

屏幕尺寸适配  2007 年,初代 iPhone发布,其拥有 3.5寸屏幕,运行 iPhone OS X。在后续几年中Apple 陆续发布了 iPhone 3GS,iPhone 4,iPhone ...
  • jiaxin_1105
  • jiaxin_1105
  • 2017年09月14日 11:15
  • 1752

iOS 开发 第三方分享 微信朋友圈分享

iOS第三方分享 微信朋友圈分享
  • Lyn_nWay
  • Lyn_nWay
  • 2016年10月13日 19:55
  • 221
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS开发:Toast for iPhone 实例分享
举报原因:
原因补充:

(最多只允许输入30个字)