`

ios 类似于android Toast

    博客分类:
  • ios
阅读更多

 

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

typedef enum iToastGravity {
	iToastGravityTop = 1000001,
	iToastGravityBottom,
	iToastGravityCenter
}iToastGravity;

enum iToastDuration {
	iToastDurationLong = 10000,
	iToastDurationShort = 1000,
	iToastDurationNormal = 3000
}iToastDuration;

typedef enum iToastType {
	iToastTypeInfo = -100000,
	iToastTypeNotice,
	iToastTypeWarning,
	iToastTypeError
}iToastType;


@class iToastSettings;

@interface iToast : NSObject {
	iToastSettings *_settings;
	NSInteger offsetLeft;
	NSInteger offsetTop;
	
	NSTimer *timer;
	
	UIView *view;
	NSString *text;
}

- (void) show;

- (iToast *) setDuration:(NSInteger ) duration;
- (iToast *) setGravity:(iToastGravity) gravity 
			 offsetLeft:(NSInteger) left
              offsetTop:(NSInteger) top;
- (iToast *) setGravity:(iToastGravity) gravity;
- (iToast *) setPostion:(CGPoint) position;

+ (iToast *) makeText:(NSString *) text;

-(iToastSettings *) theSettings;

@end



@interface iToastSettings : NSObject<NSCopying>{
	NSInteger duration;
	iToastGravity gravity;
	CGPoint postition;
	iToastType toastType;
	
	NSDictionary *images;
	
	BOOL positionIsSet;
}


@property(assign) NSInteger duration;
@property(assign) iToastGravity gravity;
@property(assign) CGPoint postition;
@property(readonly) NSDictionary *images;


- (void) setImage:(UIImage *)img forType:(iToastType) type;
+ (iToastSettings *) getSharedSettings;

@end

 //.m文件

 

#import "iToast.h"
#import <QuartzCore/QuartzCore.h>

static iToastSettings *sharedSettings = nil;

@interface iToast(private)

- (iToast *) settings;

@end


@implementation iToast


- (id) initWithText:(NSString *) tex{
	if (self = [super init]) {
		text = [tex copy];
	}
	
	return self;
}

- (void) show{
	
	iToastSettings *theSettings = _settings;
	
	if (!theSettings) {
		theSettings = [iToastSettings getSharedSettings];
	}
	
	UIFont *font = [UIFont systemFontOfSize:16];
	CGSize textSize = [text sizeWithFont:font constrainedToSize:CGSizeMake(280, 60)];
	
	UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, textSize.width + 5, textSize.height + 5)];
	label.backgroundColor = [UIColor clearColor];
	label.textColor = [UIColor whiteColor];
	label.font = font;
	label.text = text;
	label.numberOfLines = 0;
	label.shadowColor = [UIColor darkGrayColor];
	label.shadowOffset = CGSizeMake(1, 1);
	
	UIButton *v = [UIButton buttonWithType:UIButtonTypeCustom];
	v.frame = CGRectMake(0, 0, textSize.width + 10, textSize.height + 10);
	label.center = CGPointMake(v.frame.size.width / 2, v.frame.size.height / 2);
	[v addSubview:label];
	
	v.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.7];
	v.layer.cornerRadius = 5;
	
	UIWindow *window = [[[UIApplication sharedApplication] windows] objectAtIndex:0];
	
	CGPoint point = CGPointMake(window.frame.size.width/2, window.frame.size.height/2);
	
	if (theSettings.gravity == iToastGravityTop) {
		point = CGPointMake(window.frame.size.width / 2, 45);
	}else if (theSettings.gravity == iToastGravityBottom) {
		point = CGPointMake(window.frame.size.width / 2, window.frame.size.height - 45);
	}else if (theSettings.gravity == iToastGravityCenter) {
		point = CGPointMake(window.frame.size.width/2, window.frame.size.height/2);
	}else{
		point = theSettings.postition;
	}
	
	point = CGPointMake(point.x + offsetLeft, point.y + offsetTop);
	v.center = point;
	
	NSTimer *timer1 = [NSTimer 
					   timerWithTimeInterval:((float)theSettings.duration)/1000 
					   target:self 
					   selector:@selector(hideToast:) 
					   userInfo:nil 
					   repeats:NO];
	[[NSRunLoop mainRunLoop] addTimer:timer1 forMode:NSDefaultRunLoopMode];
	
	[window addSubview:v];
	
	view = [v retain];
	
	[v addTarget:self action:@selector(hideToast:) forControlEvents:UIControlEventTouchDown];
}

- (void) hideToast:(NSTimer*)theTimer{
	[UIView beginAnimations:nil context:NULL];
	view.alpha = 0;
	[UIView commitAnimations];
	
	NSTimer *timer2 = [NSTimer 
					   timerWithTimeInterval:500 
					   target:self 
					   selector:@selector(hideToast:) 
					   userInfo:nil 
					   repeats:NO];
	[[NSRunLoop mainRunLoop] addTimer:timer2 forMode:NSDefaultRunLoopMode];
}

- (void) removeToast:(NSTimer*)theTimer{
	[view removeFromSuperview];
}


+ (iToast *) makeText:(NSString *) _text{
	iToast *toast = [[[iToast alloc] initWithText:_text] autorelease];
	
	return toast;
}


- (iToast *) setDuration:(NSInteger ) duration{
	[self theSettings].duration = duration;
	return self;
}

- (iToast *) setGravity:(iToastGravity) gravity 
			 offsetLeft:(NSInteger) left
			  offsetTop:(NSInteger) top{
	[self theSettings].gravity = gravity;
	offsetLeft = left;
	offsetTop = top;
	return self;
}

- (iToast *) setGravity:(iToastGravity) gravity{
	[self theSettings].gravity = gravity;
	return self;
}

- (iToast *) setPostion:(CGPoint) _position{
	[self theSettings].postition = CGPointMake(_position.x, _position.y);
	
	return self;
}

-(iToastSettings *) theSettings{
	if (!_settings) {
		_settings = [[iToastSettings getSharedSettings] copy];
	}
	
	return _settings;
}

@end


@implementation iToastSettings
@synthesize duration;
@synthesize gravity;
@synthesize postition;
@synthesize images;

- (void) setImage:(UIImage *) img forType:(iToastType) type{
	if (!images) {
		images = [[NSMutableDictionary alloc] initWithCapacity:4];
	}
	
	if (img) {
		NSString *key = [NSString stringWithFormat:@"%i", type];
		[images setValue:img forKey:key];
	}
}


+ (iToastSettings *) getSharedSettings{
	if (!sharedSettings) {
		sharedSettings = [iToastSettings new];
		sharedSettings.gravity = iToastGravityCenter;
		sharedSettings.duration = iToastDurationShort;
	}
	
	return sharedSettings;
	
}

- (id) copyWithZone:(NSZone *)zone{
	iToastSettings *copy = [iToastSettings new];
	copy.gravity = self.gravity;
	copy.duration = self.duration;
	copy.postition = self.postition;
	
	NSArray *keys = [self.images allKeys];
	
	for (NSString *key in keys){
		[copy setImage:[images valueForKey:key] forType:[key intValue]];
	}
	
	return copy;
}

@end

 

//调用

 [[iToast makeText:@"需要显示的内容"] show];

 

 

 

 

 

分享到:
评论

相关推荐

    ReactNativeToast一个用于android和ios类似于androidtoast提示控件

    React Native Toast是一个跨平台的组件,它为Android和iOS提供了类似Android原生Toast的功能。这个组件使得开发者在使用React Native进行混合移动应用开发时,能够方便地实现快速、简洁的提示信息显示,无论是在...

    IOS上类似android的TOAST弹出窗口

    在iOS开发中,为了实现类似于Android的Toast功能,开发者通常会使用第三方库或者自定义视图来达到相同的效果。在Android系统中,Toast是一种轻量级的提示方式,它可以在屏幕上短暂显示信息,然后自动消失,不影响...

    iOS编写Android的Toast控件

    在iOS开发中,为了实现类似Android的Toast效果,开发者经常需要自定义一个控件来达到显示短暂消息的目的。本教程将深入讲解如何在iOS中创建一个功能与Android Toast相似的自定义控件,以帮助iOS应用增加更多元化的...

    FlutterToast,flutter的android toast插件.zip

    FlutterToast是针对Flutter框架开发的一款插件,专用于在Android和iOS平台上实现类似原生Toast的功能。这个开源项目为开发者提供了便捷的方式,在跨平台的Flutter应用中显示短暂的通知消息,无需深入理解每个平台的...

    iOS Toast.zip

    在iOS开发中,"Toast"通常指的是一个短暂显示信息的小视图,它可以在屏幕上的任意位置弹出,显示一些简短的通知或者提示信息,然后在一段时间后自动消失,类似于Android平台中的同名功能。这个"iOS Toast.zip"压缩包...

    Flutter的Android和iOSToastLibrary

    总结一下,Flutter的Android和iOSToastLibrary是一个关键的开发工具,它使得在Flutter应用中实现类似原生的Toast功能变得简单。无论是在Android还是iOS设备上,开发者都能够快速地向用户传达信息,提升应用的用户...

    cordova phonegap toast ios插件

    而“Cordova PhoneGap Toast iOS插件”是专为这类应用设计的一个功能组件,主要用于在iOS平台上实现弹出提示信息,类似于Android中的Toast控件,能够向用户展示短暂的通知信息而不打断当前操作。 【描述】:“一款...

    CocosCreator-Toast.rar

    虽然描述中提到了“类似于Android的Toast”,但这个组件应该是跨平台的,可以运行在Cocos Creator支持的所有平台上,包括iOS、Android、Web等。 通过理解和利用这个自定义Toast组件,开发者可以提高Cocos Creator...

    类似于安卓Toast的一种提示效果

    "类似于安卓Toast的一种提示效果" 这个标题表明我们将要讨论的是一个在iOS平台上实现的UI组件,它的功能与Android系统中的Toast类似。在Android中,Toast是一种轻量级的提示方式,它能够在屏幕上的指定位置短暂显示...

    IOS应用源码——类似安卓的底部动态提示.zip

    这个库使得iOS开发者能够方便地在应用中添加自定义的、可配置的底部提示视图,为用户提供类似于Android的用户体验。 在压缩包中,"altoastview.png"是一个示例图片,展示了ALToastView在实际应用中的外观。你可以...

    AFToast:一个简单的 iOS Toast

    AFToast 是一个专为 iOS 平台设计的轻量级库,它提供了一个简单易用的方式来显示短暂的通知消息,类似于 Android 中的 Toast。这个库是用 Objective-C 编写的,对于那些使用 Objective-C 进行 iOS 开发的程序员来说...

    android时间选择器仿iOS自定义直接调用

    在Android开发中,有时我们希望实现与iOS类似的用户体验,其中包括时间选择器的界面风格。本文将详细介绍如何在Android中创建一个仿iOS样式的时间选择器,并提供一个可直接调用的源码实现。这个自定义控件名为...

    仿IOS的自定义组合AlertDialog(更新版)

    这个项目名为"GroupDialogDemo",它是一个基于Android Studio的工程,适用于那些希望在应用中引入类似iOS弹窗效果的开发者。 首先,我们来理解`AlertDialog`的基本概念。`AlertDialog`是Android SDK提供的一种原生...

    高仿ios各种加载效果

    本项目中的“高仿ios吐司效果”意味着开发者可以使用这套组件在Android应用中实现与iOS类似的通知展示方式,提高应用的统一性和美观度。 项目中的TipsDemo可能是演示这些效果的示例代码或者应用。通常,这样的Demo...

    IOS ToastKit

    这些提示信息通常会在屏幕上停留一段时间后自动消失,类似于Android中的Toast。为了在iOS平台上实现类似的特性,开发者可以利用第三方库`ToastKit`。本文将深入探讨`ToastKit`的功能、用法以及如何将其集成到iOS项目...

    类似安卓的IOS提示窗口,轻量级,容易整合到你的项目 [HUD]

    这里提到的是一个设计风格类似于Android的iOS HUD组件,意味着它可能借鉴了Android系统的提示窗口设计,但又针对iOS平台进行了优化,以提供更流畅的用户体验。 描述中提到的“非常容易实用,调用方便,不会对你项目...

    基于IOS吐司提示框

    在iOS开发中,"吐司提示框"是一种常见的用户界面元素,它能够在短时间内向用户显示简短的信息,然后自动消失,类似于Android系统中的Toast。这个压缩包提供的资源可能是一个自定义的UI组件,用于在iOS应用中实现类似...

    IOS应用源码之类似安卓的底部动态提示 .rar

    本资源提供了一个iOS应用源码,它实现了类似于Android平台上的底部动态提示功能,旨在帮助开发者在iOS应用中创建类似的用户体验。 在Android中,底部动态提示通常是一个浮层或者小窗口,它会出现在屏幕底部,用于...

    基于Vue的Toast提示框

    本教程将详细讲解如何在Vue项目中实现一个类似安卓或iOS系统的Toast提示框功能。 首先,理解Toast的概念:Toast是一种轻量级的通知方式,它会在屏幕中央或底部短暂显示信息,例如“登录成功”或“操作失败”,在...

    Android-Toasty提供多种风格的主题普通吐司

    "Toasty"是一个轻量级的库,专门用于创建具有多种风格的提示信息,类似于iOS中的Toast。传统的Android Toast虽然简单易用,但在样式定制方面较为有限。而Toasty则弥补了这一不足,提供了预设的多种主题风格,如error...

Global site tag (gtag.js) - Google Analytics