如果需要在状态栏显示自定义的消息时,就需要自定义状态栏。
代码如下:
XYCustomStatusBar.h
- #import <UIKit/UIKit.h>
- @interface XYCustomStatusBar : UIWindow{
- UILabel *_messageLabel;
- }
- - (void)showStatusMessage:(NSString *)message;
- - (void)hide;
- @end
XYCustomStatusBar.m
- #import "XYCustomStatusBar.h"
- @implementation XYCustomStatusBar
- - (void)dealloc{
- [super dealloc];
- [_messageLabel release], _messageLabel = nil;
- }
- - (id)init{
- self = [super init];
- if (self) {
- self.frame = [UIApplication sharedApplication].statusBarFrame;
- self.backgroundColor = [UIColor blackColor];
- self.windowLevel = UIWindowLevelStatusBar + 1.0f;
- _messageLabel = [[UILabel alloc] initWithFrame:self.bounds];
- [_messageLabel setTextColor:[UIColor whiteColor]];
- [_messageLabel setTextAlignment:NSTextAlignmentRight];
- [_messageLabel setBackgroundColor:[UIColor clearColor]];
- [self addSubview:_messageLabel];
- }
- return self;
- }
- - (void)showStatusMessage:(NSString *)message{
- self.hidden = NO;
- self.alpha = 1.0f;
- _messageLabel.text = @"";
- CGSize totalSize = self.frame.size;
- self.frame = (CGRect){ self.frame.origin, 0, totalSize.height };
- [UIView animateWithDuration:0.5 animations:^{
- self.frame = (CGRect){self.frame.origin, totalSize };
- } completion:^(BOOL finished){
- _messageLabel.text = message;
- }];
- }
- - (void)hide{
- self.alpha = 1.0f;
- [UIView animateWithDuration:0.5f animations:^{
- self.alpha = 0.0f;
- } completion:^(BOOL finished){
- _messageLabel.text = @"";
- self.hidden = YES;
- }];
- }
- @end
为了让自定义的状态栏可以让用户看到,设置了它的windowlevel,在ios中,windowlevel属性决定了UIWindow的显示层次,默认的windowlevel为UIWindowLevelNormal,即0.0 。为了能覆盖默认的状态栏,将windowlevel设置高点。其他代码基本上都不解释什么,如果要特殊效果,可以自己添加。