iOS的風格和Apple其他産品一樣,簡單而粗暴。沒有給人其他選擇的餘地,讓你又愛又恨。同樣的,Apple對待iOS平台的開發人員和對待大衆消費者一樣,也不給你留餘地。UIAlertView就是一個鮮明标志。功能簡單,甚至單一,定制性差,消耗資源。在資源緊張的裝置上,UIAlertView的動畫效果都會稍微卡一下,很是别扭。
這時還是很希望在iOS上有一個Android風格的Toast控件。
我制作了一個demo,使用起來感覺效果還是很不錯的。

<a></a>
這個類的接口設計如下:
#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
===The interface of the SharedSettings ===
@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;
從接口上看,可以設定風格和顯示時間,顯示位置等,但是從實作代碼上看是圖檔顯示隻是預留的接口,尚未實作。其顯示的位置在裝置旋轉時也沒有進行處理,沒有進行橫屏等其他方向的顯示控制。
簡單的調用
[[iToast makeText:NSLocalizedString(@"The activity has been successfully saved.", @"")] show];
設定顯示位置
[[[iToast makeText:NSLocalizedString(@"The activity has been successfully saved.", @"")] setGravity:iToastGravityBottom] show];
設定顯示位置和顯示時長類型
[[[[iToast makeText:NSLocalizedString(@"Something to display a very long time", @"")] setGravity:iToastGravityBottom] setDuration:iToastDurationLong] show];