天天看點

[開源]在iOS上實作Android風格的控件Toast

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

這時還是很希望在iOS上有一個Android風格的Toast控件。

我制作了一個demo,使用起來感覺效果還是很不錯的。

[開源]在iOS上實作Android風格的控件Toast

<a></a>

這個類的接口設計如下:

#import &lt;Foundation/Foundation.h&gt;

#import &lt;UIKit/UIKit.h&gt;

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&lt;NSCopying&gt;{

     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];

繼續閱讀