首页 > 代码库 > IOS开发之自定义状态条

IOS开发之自定义状态条

第一种方法:

-(void)setRefreshWindow{
    CGRect frame = CGRectMake(0.0, 0.0, 320.0, 20.0);
    statusbarWindow = [[UIWindow alloc] initWithFrame:frame];
    [statusbarWindow setBackgroundColor:[UIColor clearColor]];
    [statusbarWindow setWindowLevel:UIWindowLevelStatusBar+1.0f];
    
    // 添加自定义子视图
    UIImageView *customView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 0, 120, 18)];
    customView.image=[UIImage imageNamed:@"数据刷新栏.png"];
    
//    UILabel *label=[[UILabel alloc] initWithFrame:CGRectMake(100, 0, 100, 20)];
//    //    label.backgroundColor=[UIColor clearColor];
//    label.text=@"数据正在刷新";
//    [customView addSubview:label];
    [statusbarWindow addSubview:customView];
    [statusbarWindow makeKeyAndVisible];
}


第二种方法:

如果需要在状态栏显示自定义的消息时,就需要自定义状态栏。

代码如下:

XYCustomStatusBar.h

01#import <UIKit/UIKit.h>
02 
03@interface XYCustomStatusBar : UIWindow{
04     
05    UILabel *_messageLabel;
06}
07 
08- (void)showStatusMessage:(NSString *)message;
09 
10- (void)hide;
11 
12@end

XYCustomStatusBar.m

01#import "XYCustomStatusBar.h"
02 
03@implementation XYCustomStatusBar
04 
05- (void)dealloc{
06    [super dealloc];
07    [_messageLabel release], _messageLabel = nil;
08}
09 
10- (id)init{
11    self = [super init];
12    if (self) {
13        self.frame = [UIApplication sharedApplication].statusBarFrame;
14        self.backgroundColor = [UIColor blackColor];
15        self.windowLevel = UIWindowLevelStatusBar + 1.0f;
16         
17        _messageLabel = [[UILabel alloc] initWithFrame:self.bounds];
18        [_messageLabel setTextColor:[UIColor whiteColor]];
19        [_messageLabel setTextAlignment:NSTextAlignmentRight];
20        [_messageLabel setBackgroundColor:[UIColor clearColor]];
21        [self addSubview:_messageLabel];
22    }
23     
24    return self;
25}
26 
27- (void)showStatusMessage:(NSString *)message{
28    self.hidden = NO;
29    self.alpha = 1.0f;
30    _messageLabel.text = @"";
31     
32    CGSize totalSize = self.frame.size;
33    self.frame = (CGRect){ self.frame.origin, 0, totalSize.height };
34     
35    [UIView animateWithDuration:0.5 animations:^{
36        self.frame = (CGRect){self.frame.origin, totalSize };
37    } completion:^(BOOL finished){
38        _messageLabel.text = message;
39    }];
40     
41}
42 
43 
44- (void)hide{
45    self.alpha = 1.0f;
46     
47    [UIView animateWithDuration:0.5f animations:^{
48        self.alpha = 0.0f;
49    } completion:^(BOOL finished){
50        _messageLabel.text = @"";
51        self.hidden = YES;
52    }];
53}
54 
55@end

为了让自定义的状态栏可以让用户看到,设置了它的windowlevel,在ios中,windowlevel属性决定了UIWindow的显示层次,默认的windowlevel为UIWindowLevelNormal,即0.0 。为了能覆盖默认的状态栏,将windowlevel设置高点。其他代码基本上都不解释什么,如果要特殊效果,可以自己添加。