热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

iosToastforiPhone(实例分享)

原文转自:http:blog.csdn.netiBrightarticledetails7078436分享一个我写的类似于android的toast的提示框主要特点

原文转自:http://blog.csdn.net/iBright/article/details/7078436

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

主要特点:

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

2,支持多行文本

3,支持设置等待时间

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

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


效果图:




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

@interface OMGToast : NSObject {NSString *text;UIButton *contentView;CGFloat duration;
}+ (void)showWithText:(NSString *) text_;
+ (void)showWithText:(NSString *) text_duration:(CGFloat)duration_;+ (void)showWithText:(NSString *) text_topOffset:(CGFloat) topOffset_;
+ (void)showWithText:(NSString *) text_topOffset:(CGFloat) topOffsetduration:(CGFloat) duration_;+ (void)showWithText:(NSString *) text_bottomOffset:(CGFloat) bottomOffset_;
+ (void)showWithText:(NSString *) text_bottomOffset:(CGFloat) bottomOffset_duration:(CGFloat) duration_;@end





#import "OMGToast.h"
#import @interface OMGToast (private)- (id)initWithText:(NSString *)text_;
- (void)setDuration:(CGFloat) duration_;- (void)dismisToast;
- (void)toastTaped:(UIButton *)sender_;- (void)showAnimation;
- (void)hideAnimation;- (void)show;
- (void)showFromTopOffset:(CGFloat) topOffset_;
- (void)showFromBottomOffset:(CGFloat) bottomOffset_;@end@implementation OMGToast- (void)dealloc{[[NSNotificationCenter defaultCenter] removeObserver:selfname:UIDeviceOrientationDidChangeNotificationobject:[UIDevice currentDevice]];contentView = nil;text = nil;
}- (id)initWithText:(NSString *)text_{if (self = [super init]) {text = [text_ copy];UIFont *font = [UIFont boldSystemFontOfSize:14];CGSize textSize = [text sizeWithFont:fontconstrainedToSize:CGSizeMake(280, MAXFLOAT) lineBreakMode:UILineBreakModeWordWrap];UILabel *textLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, textSize.width + 12, textSize.height + 12)];textLabel.backgroundColor = [UIColor clearColor];textLabel.textColor = [UIColor whiteColor];textLabel.textAlignment = UITextAlignmentCenter;textLabel.font = font;textLabel.text = text;textLabel.numberOfLines = 0;contentView = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, textLabel.frame.size.width, textLabel.frame.size.height)];contentView.layer.cornerRadius = 5.0f;contentView.layer.borderWidth = 1.0f;contentView.layer.borderColor = [[UIColor grayColor] colorWithAlphaComponent:0.5].CGColor;contentView.backgroundColor = [UIColor colorWithRed:0.2fgreen:0.2fblue:0.2falpha:0.75f];[contentView addSubview:textLabel];contentView.autoresizingMask = UIViewAutoresizingFlexibleWidth;[contentView addTarget:selfaction:@selector(toastTaped:)forControlEvents:UIControlEventTouchDown];contentView.alpha = 0.0f;duration = 3;[[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(deviceOrientationDidChanged:)name:UIDeviceOrientationDidChangeNotificationobject:[UIDevice currentDevice]];}return self;
}- (void)deviceOrientationDidChanged:(NSNotification *)notify_{[self hideAnimation];
}-(void)dismissToast{[contentView removeFromSuperview];
}-(void)toastTaped:(UIButton *)sender_{[self hideAnimation];
}- (void)setDuration:(CGFloat) duration_{duration = duration_;
}-(void)showAnimation{[UIView beginAnimations:@"show" context:NULL];[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];[UIView setAnimationDuration:0.3];contentView.alpha = 1.0f;[UIView commitAnimations];
}-(void)hideAnimation{[UIView beginAnimations:@"hide" context:NULL];[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];[UIView setAnimationDelegate:self];[UIView setAnimationDidStopSelector:@selector(dismissToast)];[UIView setAnimationDuration:0.3];contentView.alpha = 0.0f;[UIView commitAnimations];
}- (void)show{UIWindow *window = [UIApplication sharedApplication].keyWindow;contentView.center = window.center;[window addSubview:contentView];[self showAnimation];[self performSelector:@selector(hideAnimation) withObject:nil afterDelay:duration];
}- (void)showFromTopOffset:(CGFloat) top_{UIWindow *window = [UIApplication sharedApplication].keyWindow;contentView.center = CGPointMake(window.center.x, top_ + contentView.frame.size.height/2);[window addSubview:contentView];[self showAnimation];[self performSelector:@selector(hideAnimation) withObject:nil afterDelay:duration];
}- (void)showFromBottomOffset:(CGFloat) bottom_{UIWindow *window = [UIApplication sharedApplication].keyWindow;contentView.center = CGPointMake(window.center.x, window.frame.size.height-(bottom_ + contentView.frame.size.height/2));[window addSubview:contentView];[self showAnimation];[self performSelector:@selector(hideAnimation) withObject:nil afterDelay:duration];
}+ (void)showWithText:(NSString *)text_{[OMGToast showWithText:text_ duration:3];
}+ (void)showWithText:(NSString *)text_duration:(CGFloat)duration_{OMGToast *toast = [[OMGToast alloc] initWithText:text_];[toast setDuration:duration_];[toast show];
}+ (void)showWithText:(NSString *)text_topOffset:(CGFloat)topOffset_{[OMGToast showWithText:text_ topOffset:topOffset_ duration:3];
}+ (void)showWithText:(NSString *)text_topOffset:(CGFloat)topOffset_duration:(CGFloat)duration_{OMGToast *toast = [[OMGToast alloc] initWithText:text_];[toast setDuration:duration_];[toast showFromTopOffset:topOffset_];
}+ (void)showWithText:(NSString *)text_bottomOffset:(CGFloat)bottomOffset_{[OMGToast showWithText:text_ bottomOffset:bottomOffset_ duration:3];
}+ (void)showWithText:(NSString *)text_bottomOffset:(CGFloat)bottomOffset_duration:(CGFloat)duration_{OMGToast *toast = [[OMGToast alloc] initWithText:text_];[toast setDuration:duration_];[toast showFromBottomOffset:bottomOffset_];
}@end



可以这样来使用

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






推荐阅读
  • 本文详细介绍了一种利用 ESP8266 01S 模块构建 Web 服务器的成功实践方案。通过具体的代码示例和详细的步骤说明,帮助读者快速掌握该模块的使用方法。在疫情期间,作者重新审视并研究了这一未被充分利用的模块,最终成功实现了 Web 服务器的功能。本文不仅提供了完整的代码实现,还涵盖了调试过程中遇到的常见问题及其解决方法,为初学者提供了宝贵的参考。 ... [详细]
  • 本文介绍了如何利用 Delphi 中的 IdTCPServer 和 IdTCPClient 控件实现高效的文件传输。这些控件在默认情况下采用阻塞模式,并且服务器端已经集成了多线程处理,能够支持任意大小的文件传输,无需担心数据包大小的限制。与传统的 ClientSocket 相比,Indy 控件提供了更为简洁和可靠的解决方案,特别适用于开发高性能的网络文件传输应用程序。 ... [详细]
  • 2.2 组件间父子通信机制详解
    2.2 组件间父子通信机制详解 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • PHP预处理常量详解:如何定义与使用常量 ... [详细]
  • 在尝试对 QQmlPropertyMap 类进行测试驱动开发时,发现其派生类中无法正常调用槽函数或 Q_INVOKABLE 方法。这可能是由于 QQmlPropertyMap 的内部实现机制导致的,需要进一步研究以找到解决方案。 ... [详细]
  • 属性类 `Properties` 是 `Hashtable` 类的子类,用于存储键值对形式的数据。该类在 Java 中广泛应用于配置文件的读取与写入,支持字符串类型的键和值。通过 `Properties` 类,开发者可以方便地进行配置信息的管理,确保应用程序的灵活性和可维护性。此外,`Properties` 类还提供了加载和保存属性文件的方法,使其在实际开发中具有较高的实用价值。 ... [详细]
  • 如何使用 `org.apache.tomcat.websocket.server.WsServerContainer.findMapping()` 方法及其代码示例解析 ... [详细]
  • 本指南介绍了如何在ASP.NET Web应用程序中利用C#和JavaScript实现基于指纹识别的登录系统。通过集成指纹识别技术,用户无需输入传统的登录ID即可完成身份验证,从而提升用户体验和安全性。我们将详细探讨如何配置和部署这一功能,确保系统的稳定性和可靠性。 ... [详细]
  • 本文深入解析了WCF Binding模型中的绑定元素,详细介绍了信道、信道管理器、信道监听器和信道工厂的概念与作用。从对象创建的角度来看,信道管理器负责信道的生成。具体而言,客户端的信道通过信道工厂进行实例化,而服务端则通过信道监听器来接收请求。文章还探讨了这些组件之间的交互机制及其在WCF通信中的重要性。 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • 本文详细介绍了在CentOS 6.5 64位系统上使用阿里云ECS服务器搭建LAMP环境的具体步骤。首先,通过PuTTY工具实现远程连接至服务器。接着,检查当前系统的磁盘空间使用情况,确保有足够的空间进行后续操作,可使用 `df` 命令进行查看。此外,文章还涵盖了安装和配置Apache、MySQL和PHP的相关步骤,以及常见问题的解决方法,帮助用户顺利完成LAMP环境的搭建。 ... [详细]
  • 在当前的软件开发领域,Lua 作为一种轻量级脚本语言,在 .NET 生态系统中的应用逐渐受到关注。本文探讨了 Lua 在 .NET 环境下的集成方法及其面临的挑战,包括性能优化、互操作性和生态支持等方面。尽管存在一定的技术障碍,但通过不断的学习和实践,开发者能够克服这些困难,拓展 Lua 在 .NET 中的应用场景。 ... [详细]
author-avatar
坦克大道_639
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有