作者:YouXianMing授權(quán)本站轉(zhuǎn)載。
效果

說明
1. 在狀態(tài)欄上顯示信息并覆蓋狀態(tài)欄信息需要技巧
2. 本設(shè)計(jì)支持外部消息view的定制,只需要實(shí)現(xiàn)規(guī)定的協(xié)議方法即可
源碼
https://github.com/YouXianMing/StatusBarMessage
//??StatusMessage.h
//??StatusBarView
//
//??Created?by?YouXianMing?on?15/7/24.
//??Copyright?(c)?2015年?YouXianMing.?All?rights?reserved.
//
#import?#import?"StatusMessageProtocol.h"
@interface?StatusMessage?:?UIView
/**
*??顯示加載的view
*
*??@param?view?????實(shí)現(xiàn)了StatusMessageProtocol的view
*??@param?duration?動(dòng)畫顯示時(shí)間
*/
+?(void)showWithView:(UIView??*)view?duration:(NSTimeInterval)duration;
/**
*??隱藏加載的view
*
*??@param?duration?隱藏動(dòng)畫顯示時(shí)間
*/
+?(void)hideWithDuration:(NSTimeInterval)duration;
///////////////////////////////////////////////////////////////////////////////////////////////////
/**
*??設(shè)置顯示以及隱藏的動(dòng)畫時(shí)間(不設(shè)置,默認(rèn)為1s)
*
*??@param?duration?動(dòng)畫時(shí)間
*/
+?(void)showAndHideDuration:(NSTimeInterval)duration;
/**
*??顯示view,然后幾秒后隱藏
*
*??@param?view????實(shí)現(xiàn)了StatusMessageProtocol的view
*??@param?seconds?延時(shí)幾秒后隱藏
*/
+?(void)showWithView:(UIView?*)view?hideAfterSeconds:(NSTimeInterval)seconds;
@end
//
//??StatusMessage.m
//??StatusBarView
//
//??Created?by?YouXianMing?on?15/7/24.
//??Copyright?(c)?2015年?YouXianMing.?All?rights?reserved.
//
#import?"StatusMessage.h"
#define??Status_Message??@"StatusMessage"
static?UIWindow????????*_statusWindow??????=?nil;
static?NSMapTable??????*_weakDictionary????=?nil;
static?NSTimeInterval???_animationDuration?=?1.f;
@implementation?StatusMessage
+?(void)initialize?{
if(self?==?[StatusMessage?class])?{
_weakDictionary?=?[NSMapTable?strongToWeakObjectsMapTable];
_statusWindow????????????????????????=?[[UIWindow?alloc]?initWithFrame:STATUS_BAR_FRAME];
_statusWindow.windowLevel????????????=?UIWindowLevelStatusBar?+?1;
_statusWindow.userInteractionEnabled?=?NO;
[_statusWindow?makeKeyAndVisible];
}
}
+?(void)showWithView:(UIView??*)view?duration:(NSTimeInterval)duration?{
[_weakDictionary?setObject:view?forKey:Status_Message];
[_statusWindow?addSubview:view];
[view?showWithDuration:duration];
}
+?(void)hideWithDuration:(NSTimeInterval)duration?{
UIView??*tmpView?=?[_weakDictionary?objectForKey:Status_Message];
[tmpView?hideWithDuration:duration];
}
+?(void)showAndHideDuration:(NSTimeInterval)duration?{
_animationDuration?=?duration;
}
+?(void)showWithView:(UIView?*)view?hideAfterSeconds:(NSTimeInterval)seconds?{
[_weakDictionary?setObject:view?forKey:Status_Message];
[_statusWindow?addSubview:view];
[view?showWithDuration:_animationDuration];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW,?seconds?*?NSEC_PER_SEC),?dispatch_get_main_queue(),?^{
UIView??*tmpView?=?[_weakDictionary?objectForKey:Status_Message];
[tmpView?hideWithDuration:_animationDuration];
});
}
@end
//
//??StatusMessageProtocol.h
//??StatusBarView
//
//??Created?by?YouXianMing?on?15/7/24.
//??Copyright?(c)?2015年?YouXianMing.?All?rights?reserved.
//
#import?/**
*??狀態(tài)欄的frame值
*/
#define??STATUS_BAR_FRAME??[[UIApplication?sharedApplication]?statusBarFrame]
@protocol?StatusMessageProtocol?@required
/**
*??顯示動(dòng)畫
*
*??@param?seconds?顯示持續(xù)時(shí)間
*/
-?(void)showWithDuration:(NSTimeInterval)seconds;
/**
*??隱藏動(dòng)畫(隱藏動(dòng)畫的時(shí)候請(qǐng)移除掉自己)
*
*??@param?seconds?隱藏持續(xù)時(shí)間
*/
-?(void)hideWithDuration:(NSTimeInterval)seconds;
@end