- 浏览: 2528436 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
jsntghf:
peio 写道这个怎么运行?Ruby On Rails的环境搭 ...
多文件上传之uploadify -
peio:
这个怎么运行?
多文件上传之uploadify -
往事如烟1:
我的项目是自己init了一个原始的project,之后将ver ...
React Native热部署之CodePush -
jsntghf:
往事如烟1 写道我按照你的说明进行,发现app退出之后,在进入 ...
React Native热部署之CodePush -
往事如烟1:
我按照你的说明进行,发现app退出之后,在进入不正确,请问是什 ...
React Native热部署之CodePush
这个功能和安卓平台的Toast类似,主要是依赖PGToast类实现。
PGToast.h
#import <Foundation/Foundation.h> @interface PGToast : NSObject - (void)show; + (PGToast *)makeToast:(NSString *)text; @end
PGToast.m
#import "PGToast.h" #import <QuartzCore/QuartzCore.h> #define bottomPadding 50 #define startDisappearSecond 3 #define disappeartDurationSecond 1.5 const CGFloat pgToastTextPadding = 5; const CGFloat pgToastLabelWidth = 180; const CGFloat pgToastLabelHeight = 60; const CGFloat pgToastLabelWidth_PAD = 360; const CGFloat pgToastLabelHeight_PAD = 100; @interface PGToast() { BOOL showInNormal; } @property (nonatomic, retain) UILabel *pgLabel; @property (nonatomic, copy) NSString *pgLabelText; - (id)initWithText:(NSString *)text; - (void)deviceOrientationChange; @end @implementation PGToast @synthesize pgLabel; @synthesize pgLabelText; - (id)initWithText:(NSString *)text { if (self = [super init]) { self.pgLabelText = text; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deviceOrientationChange) name:UIDeviceOrientationDidChangeNotification object:nil]; } return self; } - (void)dealloc { [pgLabel release]; [pgLabelText release]; [super dealloc]; } + (PGToast *)makeToast:(NSString *)text { PGToast *pgToast = [[PGToast alloc] initWithText:text]; return pgToast; } - (void)show { UIFont *font; CGSize textSize; if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { font = [UIFont systemFontOfSize:16]; textSize = [pgLabelText sizeWithFont:font constrainedToSize:CGSizeMake(pgToastLabelWidth, pgToastLabelHeight)]; }else{ font = [UIFont systemFontOfSize:30]; textSize = [pgLabelText sizeWithFont:font constrainedToSize:CGSizeMake(pgToastLabelWidth_PAD, pgToastLabelHeight_PAD)]; } self.pgLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, textSize.width + 2 * pgToastTextPadding, textSize.height + 2 * pgToastTextPadding)]; pgLabel.backgroundColor = [UIColor colorWithRed:174.0 / 255.0 green:174.0 / 255.0 blue:174.0 / 255.0 alpha:0.9]; pgLabel.textColor = [UIColor whiteColor]; pgLabel.layer.cornerRadius = 10; pgLabel.layer.borderWidth = 2; pgLabel.numberOfLines = 2; pgLabel.font = font; pgLabel.textAlignment = UITextAlignmentCenter; pgLabel.text = self.pgLabelText; [NSTimer scheduledTimerWithTimeInterval:startDisappearSecond target:self selector:@selector(toastDisappear:) userInfo:nil repeats:NO]; UIWindow *window = [[[UIApplication sharedApplication] windows] objectAtIndex:0]; [window addSubview:self.pgLabel]; [self deviceOrientationChange]; } - (void)deviceOrientationChange { CGFloat centerX, centerY; CGFloat windowCenterX = [[UIScreen mainScreen] bounds].size.width * 0.5; CGFloat windowCenterY = [[UIScreen mainScreen] bounds].size.height * 0.5; CGFloat windowWidth = [[UIScreen mainScreen] bounds].size.width; CGFloat windowHeight = [[UIScreen mainScreen] bounds].size.height; UIInterfaceOrientation currentOrient = [UIApplication sharedApplication].statusBarOrientation; if (currentOrient == UIInterfaceOrientationLandscapeRight) { CGAffineTransform rightTransform = CGAffineTransformMake(0.0, 1.0, -1.0, 0.0, 0.0, 0.0); self.pgLabel.transform = rightTransform; centerX = bottomPadding; centerY = windowCenterY; self.pgLabel.center = CGPointMake(centerX, centerY); } else if(currentOrient == UIInterfaceOrientationLandscapeLeft) { CGAffineTransform leftTransform = CGAffineTransformMake(0.0, -1.0, 1.0, 0.0, 0.0, 0.0); pgLabel.transform = leftTransform; centerX = windowWidth - bottomPadding; centerY = windowCenterY; self.pgLabel.center = CGPointMake(centerX, centerY); } else if(currentOrient == UIInterfaceOrientationPortraitUpsideDown) { CGAffineTransform upsideDownTransform = CGAffineTransformMake(-1.0, 0.0, 0.0, -1.0, 0.0, 0.0); pgLabel.transform = upsideDownTransform; centerX = windowCenterX; centerY = bottomPadding; self.pgLabel.center = CGPointMake(centerX, centerY); } else if(currentOrient == UIInterfaceOrientationPortrait) { CGAffineTransform portraitTransform = CGAffineTransformMake(1.0, 0.0, 0.0, 1.0, 0.0, 0.0); pgLabel.transform = portraitTransform; centerX = windowCenterX; centerY = windowHeight - bottomPadding; self.pgLabel.center = CGPointMake(centerX, centerY); } showInNormal = YES; } - (void)toastDisappear:(NSTimer *)timer { [timer invalidate]; [NSTimer scheduledTimerWithTimeInterval:1 / 60.0 target:self selector:@selector(startDisappear:) userInfo:nil repeats:YES]; } - (void)startDisappear:(NSTimer *)timer { static int timeCount = 60 * disappeartDurationSecond; if (timeCount >= 0) { [self.pgLabel setAlpha:timeCount / 60.0]; if (timeCount == 0) { [[NSNotificationCenter defaultCenter] removeObserver:self]; [self release]; self = nil; } timeCount--; } else { [timer invalidate]; timeCount = 60 * disappeartDurationSecond; } } @end
调用就很简单了:
PGToast *toast = [PGToast makeToast:@"This is a tip."]; [toast show];
发表评论
-
Error watching file for changes: EMFILE
2016-12-15 11:57 1299执行npm start后报错: Error watc ... -
CocoaPods升级1.1.1报错
2016-12-15 08:39 793ERROR: While executing gem .. ... -
Visual Studio Code运行React Native报错
2016-06-13 09:43 1612React Native:0.27.2 React:15 ... -
React Native 0.27.2编译报错this._nativeModule.addListener is not a function
2016-06-12 15:21 3854React Native:0.27.2 React:15 ... -
Unable to resolve module ReactDefaultPerf from
2016-06-02 13:04 2782package.json信息如下: "reac ... -
React Native 0.26.2编译报错Undefined symbols for architecture x86_64
2016-05-26 11:15 2014React Native:0.26.2 React:15. ... -
Failed to update auto layout status: Failed to load designables from path (null)
2016-04-05 22:11 1714确保CocoaPods是0.36.1以上版本,然后在podf ... -
集成微信支付出现Undefined symbols for architecture x86_64错误
2016-03-21 13:22 1751Undefined symbols for architec ... -
React Native热部署之CodePush
2016-01-10 22:27 6240本文使用的环境是Mac OS 10.11.1、Xcode ... -
浅谈React Native中的FlexBox布局
2015-11-17 18:38 4304React Native通过一个基于FlexBox的布局引 ... -
React Native之构建一个简单的列表页
2015-10-23 14:45 2160本文中我们将创建一个简单的电影应用,这个应用将从Rotten ... -
React Native之环境搭建
2015-10-20 16:30 1445本文使用的环境是Mac O ... -
获取图片属性的方法
2015-10-18 20:43 3143很多时候我们需要获 ... -
NSCache的下标用法
2015-09-18 00:19 1213NSCache类和NSDictionary类很相似,也提供 ... -
如何给category添加属性
2015-08-16 10:41 691主要是使用了runtime中的associative机制。 ... -
UITableView的两种重用Cell方法的区别
2015-08-10 13:07 16145UITableView中有两种重用Cell的方法: - ... -
SDImageCache.m报错Unused variable 'fileName'
2015-08-04 21:56 1172GCC手册中的相关解释: unused:This att ... -
Swift调用Objective-C
2015-07-13 23:33 1226Swift调用Objective-C需要一个名为<工程 ... -
使用GCD实现倒计时
2015-07-24 21:47 1084__block int timeout = 60; // ... -
导航栏加分割线的实现
2015-07-01 22:00 1763self.view.backgroundColor = [U ...
相关推荐
然而,Android原生的`Toast`功能有限,样式单一且无法自定义动画效果。针对这一问题,开发者们创建了各种扩展库,以增强`Toast`的功能,提升用户体验。本文将探讨一个名为"Android 优化加载中的Toast,实现真正的夹...
在C# WinForm开发中,有时我们希望实现类似Android中的Toast功能,以便向用户显示短暂的通知消息。Android的Toast提供了一种轻量级的提示方式,可以在不中断用户操作的情况下展示信息。C# WinForm虽然没有内置的...
【C# Winform 类似Android Toast消息功能】是一种在Windows桌面应用中实现类似Android系统Toast功能的技术。在Android中,Toast是一种短暂显示信息的方式,它不会阻断用户与界面的交互,而是在屏幕某一位置短暂展示...
这篇博文“Toast功能的实现(二)”可能深入探讨了`Toast`的自定义实现和源码分析。虽然没有提供具体的博文内容,但我们可以根据`Toast`的一般特性和可能涉及的话题进行详细讲解。 ### 1. Toast的基本用法 `Toast`...
C# 实现像android toast的提示。不想做修改的话,直接调用就能使用,如想做的更加个性化,可自行修改。 var toast = new Toast("标题", "提示内容", 2(保持时间), 0x0(动画效果), 0x0); toast.Show();
html自定义提示框,仿android的Toast功能,可以自定义显示时间!
Android的Toast功能可以在屏幕任意位置显示一个短暂的通知信息,而不影响用户与界面的交互。iOS虽然没有直接提供这样的组件,但可以通过自定义UIView或者使用一些第三方库来实现相同的功能。 首先,我们来理解一下...
在这个"CocosCreator-Toast.rar"压缩包中,包含的是一个适用于Cocos Creator的自定义Toast组件,这个组件模仿了Android平台上的Toast功能,用于在游戏界面中显示短暂的信息提示。 1. **Toast控件介绍**: Toast...
本文将详细讲解如何在Cocos2d-x中实现一个类似Android Toast的功能。 Cocos2d-x是一款基于C++的2D游戏开发框架,它提供了一个强大的渲染引擎以及一套丰富的游戏开发工具。由于Cocos2d-x主要处理游戏逻辑和图形渲染...
总结来说,通过自定义`Toast`并结合`MediaPlayer`,我们可以实现一个带声音提示的功能。这使得用户在收到`Toast`信息时不仅能看到文字,还能听到声音,提升了应用的交互体验。在实际项目中,可以根据需求进一步定制`...
在这种情况下,我们可以创建自定义的Application级别的Toast来实现更灵活的功能。 自定义Toast意味着你可以控制其外观,包括背景颜色、文字颜色、字体大小、图标等。同时,通过在Application级别处理,可以确保...
在本文中,我们将深入探讨如何在Qt环境中实现一个仿安卓Toast效果的功能,这将帮助开发者在他们的Qt应用中创建类似Android系统中短暂显示信息的组件。这个功能是跨平台的,可以在Windows和Linux(如Ubuntu)等操作...
本文将详细介绍如何在Android中实现`Toast`的自定义样式,包括自定义位置、添加图片以及自定义显示时长。 一、自定义`Toast`的位置 系统默认的`Toast`会在屏幕底部或中间显示,但这往往不能满足所有设计需求。我们...
通过以上步骤,我们就可以在Qt环境中实现一个功能完备、性能高效的仿Android toast控件。这样的控件不仅可以在桌面应用中使用,还可以方便地移植到Qt支持的其他平台,如移动设备或嵌入式系统。在实际项目中,可以...
自定义Toast通常会在一段时间后自动消失,因此在创建Dialog时,可以使用`Handler`和`Runnable`来实现延时关闭的功能。 **示例代码(Kotlin):** ```kotlin class CustomToastFragment : AppCompatDialogFragment...
Android实现五种不同外观样式的Toast弹出框效果,演示了自定义位置的Toast显示、带图片的Toast显示、完全自定义的Toast显示、长时间的Toast显示5种Toast,在效果测试时,你可以单击任意一种Toast,查看对应的弹出...
下面我们将深入探讨如何在微信小程序中实现自定义`Toast`功能。 1. **创建自定义组件** 首先,我们需要创建一个自定义组件,通常命名为`custom-toast`。这个组件将包含显示文本、动画效果、背景颜色、字体样式等...
Android 自定义 Toast ...在 Android 开发中,自定义 Toast 的显示时间是一个非常重要的功能,可以满足不同的应用场景需求。使用 WindowManager 可以实现自定义 Toast 的显示时间,并提供了更加灵活的 Toast 显示方式。
描述“简单的toast效果,几行代码,没啥的”表明实现这个功能并不复杂。接下来,我们将会深入探讨`Toast`的使用方法,以及如何自定义`Toast`以满足更个性化的展示需求。 1. **基础使用** 创建一个基本的`Toast`...